单例(singleton)模式

来源:互联网 发布:齐柏林飞船知乎 编辑:程序博客网 时间:2024/06/05 17:59

             取材均来自head first dp。

             单例模式的懒汉式:             

public class LazySingleton {private static LazySingleton singleton = null;private LazySingleton() {super();}public LazySingleton getInstance(){if(singleton == null){singleton = new LazySingleton();}return singleton;}}
          单例模式的勤汉式:

public class DiligentSingleton {private static DiligentSingleton instance = new DiligentSingleton();private DiligentSingleton(){}private static DiligentSingleton getInstance(){return instance;}}

       差异:

       1.当单例管理的资源很重,而这次执行过程中有可能没有用到它,就会造成资源浪费,所以优先考虑懒汉式,当使用时再进行初始化操作。

       2.懒汉式处在并发环境中时,很可能出现意外,导致创建多个实例,从而造成错误,勤汉式依赖jvm加载这个类时马上初始化对象,可以规避并发问题。

多线程懒汉式:

public class MultithreadingSingleton {//volatile防止编译器对初始化顺序进行重排private volatile static MultithreadingSingleton instance = null;private MultithreadingSingleton(){};public static MultithreadingSingleton getInstance(){if(instance == null){synchronized(MultithreadingSingleton.class){if(instance == null){instance = new MultithreadingSingleton();}}}return instance;}}


基于类初始化的解决方案

public class InstanceFactory {    private static class InstanceHolder {        public static Instance instance = new Instance();    }     public static Instance getInstance() {        return InstanceHolder.instance ;  //这里将导致InstanceHolder类被初始化    }}


原创粉丝点击