设计模式之单列模式

单列模式就是保证类只有一个实例。接下来看下实现单列模式的方法:
package com.djk.design.danlie;

public class Single
{
	private static Single single = null;
	
	private Single()
	{
		
	}
	
	public static Single getInstance()
	{
		if(null ==single)
		{
			single = new Single();
		}
		return single;
	}
}
这种模式下在多线程的环境下可能会产生多个实例。
package com.djk.design.danlie;

public class Single2
{
	private static Single2 single = null;
	
	private Single2()
	{
		
	}
	
	public synchronized static Single2 getInstance()
	{
		if(null ==single)
		{
			single = new Single2();
		}
		return single;
	}
}



 这种情况下的单列由于在方法同步的情况下所以得到单实例对象的时候效率会降低。

package com.djk.design.danlie;

public class Single2
{
	private static Single2 single = null;
	
	private Single2()
	{
		
	}
	
	public  static Single2 getInstance()
	{
		if(null ==single)
		{
			synchronized (Single2.class) {
				if(null ==single)
				{
					single = new Single2();
				}
			}
		}
		return single;
	}
}


这种情况下的单列只有在对象为空的情况下才会同步,把同步的粒度降低了。

package com.djk.design.danlie;

public class Single2
{
	private static Single2 single = new Single2() ;
	
	private Single2()
	{
		
	}
	
	public  static Single2 getInstance()
	{
		return single;
	}
}


这种单列在调用静态方法的时候就生产单实例不存在线程安全问题。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值