单例模式

首先,单例模式属于创建性模式之一,主要解决的问题是如何创建对象,获得产品,保证一个类只有一个实例,并提供一个访问它的全局访问点。

         单例模式的结构很简单,只需要一个类就可以完成。

基础的C#代码

Public Singleton
{
	private static Singleton instance;
	private Singleton(){} //将构造函数私有化,避免外界利用new来创建实例
	public static Singleton GetInstance(){	//此方法是获得本类实例的唯一全局访问点
	if(instance==null)	//若实例不存在new出新实例
  	{
		instance=new Singleton();
}	
Return instance;
}	
}


 

当面对多线程问题,当多个线程同时访问Singleton类,调用GetInstance()方法,会可能导致创建多个实例。这时,就要将线程加锁,保证一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待,直到对象被释放。

 
 
Public Singleton
{
	private static Singleton instance;
	private static readonly object syncRoot=new object();
	private Singleton(){}
	public static Singleton GetInstance(){
	if(instance==null)	//先判断实例是否存在,不存在再加锁
	{
		Lock(syncRoot)	//在同一个时刻加了锁的那部分程序只有一个进程可以进入
		{	
			if(instance==null)
				{		
					instance=new Singleton();
				}
		}	
		Return instance;
		}
	}
}
 
关于继承的问题:如果有别的类可以继承单例类的话。单例类将失去作用,因为当有类继承单例的时候,继承类拥有GetInstance方法,这时候,单例的访问点就会增多,打破了单例类的原则。

                
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值