单例模式

来源:互联网 发布:淘宝商城开店条件 编辑:程序博客网 时间:2024/06/14 10:22

单例模式

  • 立即加载(饿汉模式)

    public class MyObject{  private static MyObject myObject = new MyObject();  private MyObject(){}  public static MyObject getInstance(){      return myObject;  }}
  • 延迟加载(懒汉模式)(线程不安全)

    public class MyObject{  private static MyObject myObject = null;  private MyObject(){}  public static MyObject getInstance(){      if(myObject == null){          myObject = new MyObject();      }      return myObject;  }}
  • DCL双检查锁机制(大多数多线程的解决方案)

    public class MyObject{  private static MyObject myObject = null;  private MyObject(){}  public static MyObject getInstance(){      if(myObject == null){          synchronized (this.getClass()){              if(myObject == null){                  myObject = new MyObject();              }          }      }      return myObject;  }}
  • 静态内置类实现单例

    public class MyObject{  private static class MyObjectHander{      private static MyObject myObject = new MyObject();  }  private MyObject(){}  public static MyObject getInstance(){      return MyObjectHander.myObject;  }}

    通过静态内部类的静态成员在使用时才会被初始化,而且只会被初始化一次来实现。

  • 序列化与反序列化的单例实现(静态内置类)

    参考连接 主要的原因时在反序列化时,ObjectInputeStream使用反射调用了类的默认构造函数,当实现readResolve后可自定义反序列化方法

  • 使用static代码块和枚举类型enmu实现

    其实都是利用了类型都只初始化一次的特性

原创粉丝点击