设计模式No.1——单例模式

  其实很久以前就翻过(不敢用看过)GOF的黑皮书,只是……看不明白,一头雾水地弃了,现在想想,应该是那时候代码量太少了,对设计模式带来的好处没有切实的体会,所以看不下去。So,现在开始,把早就应该做的事做完的事完成。Mark一本棒棒哒设计模式入门读物,《大话设计模式》,最近看得很带劲。

  闲话少说,开启 单例模式

  一些时候,对于某个类,我们需要保证整个系统中只有它的一个实例(为了节约资源,或者数据共享一类的原因),那怎样确保不会出现多个实例呢,这就涉及到了 :单例模式

  对象是类的构造器创建的,如果构造器谁都可以调用,肯定没法实现“单例”,因此,很自然的想到重写构造方法,将其私有化,然后,把创建实例的操作在类的私有方法中实现(只执行一次),最后定义一个公有的方法,返回该实例,于是就有了如下的代码(饿汉模式):

<span style="font-size:18px;">public class Instance {
	// 私有构造方法
	private Instance() {
	};
		
	// 构建唯一实例
	private static Instance in = new Instance();

	// 获取实例的方法
	public static Instance getInstance() {
		return in;
	}
}
</span>

但考虑到一开始就创建类并不完全符合实际,在第一次需要使用实例的时候创建才是更常见的情况,便有了如下的变化,(坊间称为懒汉模式)

<span style="font-size:18px;">        private static Instance in;
	public static Instance getInstance(){
               if(in==null){
		in=new Instance();
		}
		return in;		
	}</span>
考虑到线程安全(上面的写法在多个线程同时访问时可能出现多个实例),又加入了同步锁,最后得到如下代码:
<span style="font-size:18px;">  public static Instance getInstance() {
        if (in == null) {
            synchronized (Instance.class) {
                if (in == null) {
                    in = new Instance();
                }
            }
        }
        return in;
    }</span>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值