单例模式

来源:互联网 发布:算法导论 第三版 当当 编辑:程序博客网 时间:2024/06/03 06:17
/** * 一、懒汉,常用的写法 */class LazySingleton{    private static LazySingleton singleton;    private LazySingleton(){    }    public static LazySingleton getInstance(){        if(singleton==null){            singleton=new LazySingleton();        }        return singleton;    }   } /** * 二、恶汉,缺点:没有达到lazy loading的效果 */class HungrySingleton{    private static HungrySingleton singleton=new HungrySingleton();    private HungrySingleton(){}    public static HungrySingleton getInstance(){        return singleton;    }}/** * 三、静态内部类 优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading */class InternalSingleton{    private static class SingletonHolder{        private final static  InternalSingleton INSTANCE=new InternalSingleton();    }       private InternalSingleton(){}    public static InternalSingleton getInstance(){        return SingletonHolder.INSTANCE;    }}/** * 四、枚举,《Effective Java》作者推荐使用的方法,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象 */enum EnumSingleton{    INSTANCE;    public void doSomeThing(){    }}/** *五、 双重校验锁,在当前的内存模型中无效 */class LockSingleton{    private volatile static LockSingleton singleton;    private LockSingleton(){}         //详见:http://www.ibm.com/developerworks/cn/java/j-dcl.html    public static LockSingleton getInstance(){        if(singleton==null){            synchronized(LockSingleton.class){                if(singleton==null){                    singleton=new LockSingleton();                }            }        }        return singleton;    }     }

java单例模式完全讲解PDF文档

0 0
原创粉丝点击