完美的单例模式

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

/**
 * 立即加载模式(饿汉模式)
 * 
 * @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 stub
			System.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();
	}
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值