完美的单例模式

来源:互联网 发布:mac找不到安装器光盘 编辑:程序博客网 时间:2024/06/13 23:45

一、立即加载模式(饿汉模式)

/** * 立即加载模式(饿汉模式) *  * @author LZN * */public class SingleOne {private static SingleOne singleOne = new SingleOne();private SingleOne() {// TODO Auto-generated constructor stub}/** * 该方法保证在多线程中获取的是同一个对象 * 该方法缺点是不能有其他实例变量,因为getInstance()不是同步方法,会引起线程安全问题 *  * @return */public static SingleOne getInstance() {return singleOne;}}

二、延迟加载模式(懒汉模式)

/** * 延迟加载模式(懒汉模式) *  * @author LZN * */public class SingleOne {// 懒汉模式(DCL双检查锁机制)private volatile static SingleOne singleOneDCL = null;private SingleOne() {// TODO Auto-generated constructor stub}/** * 采用DCL双检查锁机制,保证在多线程中获取的是同一个对象 *  * @return */public static SingleOne getInstance() {if (singleOneDCL == null) {// 在此处处理一些准备工作synchronized (SingleOne.class) {if (singleOneDCL == null) {singleOneDCL = new SingleOne();}}}return singleOneDCL;}}

三、静态内置类实现单例模式

/** * 静态内置类实现单例模式 *  * @author LZN * */public class SingleOne {private static class MyObjectHandler {private static SingleOne singleOne = new SingleOne();}private SingleOne() {// TODO Auto-generated constructor stub}/** *  * @return */public static SingleOne getInstance() {return MyObjectHandler.singleOne;}}

四、利用静态初始化器实现单例模式

/** * 利用静态初始化器实现单例模式 *  * @author LZN * */public class SingleOne {private static SingleOne singleOne;static {singleOne = new SingleOne();}private SingleOne() {// TODO Auto-generated constructor stub}/** *  * @return */public static SingleOne getInstance() {return singleOne;}}

五、使用enum枚举实现单例模式

/** * 使用enum枚举实现单例模式 *  * @author LZN * */public class SingleOne {public enum MyEnumSingle {objectHandler;private SingleOne singleOne;private MyEnumSingle() {// TODO Auto-generated constructor stubSystem.out.println("SingleOne.MyEnumSingle.MyEnumSingle()");singleOne = new SingleOne();}public SingleOne getInstance() {return singleOne;}}private SingleOne() {// TODO Auto-generated constructor stub}/** *  * @return */public static SingleOne getInstance() {return MyEnumSingle.objectHandler.getInstance();}}


0 0
原创粉丝点击