单例模式:所谓单例模式就是确保类只有一个对象,并提供一个公共的访问接口。下面根据概念分析单例模式。
1、确保一个实例,就是不让程序随处可以new一个对象,这个怎么实现呢?运用私有构造函数。
public class Singleton { private Singleton() { } }
这样Singleton就不能new对象了。
2、唯一的对象在何处?在内部定义一个静态的Singleton对象,为什么要定义静态的呢,因为静态对象属于类。然后提供一个公共的访问接口即可
public class Singleton { private Singleton() { } private static Singleton singleton; public static Singleton GetInstance() { if(singleton==null) { singleton=new Singletion(); } return singleton; } }
单例模式就算完成了,但是这里存在个问题,对于多线程,可能同时存在几个线程同时走到if(singleton==null)这儿,这样就会new出多个singleton实例,这也不能保证其唯一。对于这种多线程的情况,我们可以加进程锁机制,确保在判断这儿只会有一个线程访问,改进如下:
public class Singleton { private Singleton() { } private static Singleton singleton; //线程锁 private static readonly object lockObj=new object(); public static Singleton GetInstance() { //双重判断是为了提高性能 if(singleton==null) { lock(lockObj) { if(singletion==null) { singleton=new Singletion(); } } } return singleton; } }
原文:http://www.cnblogs.com/session0827/p/5513736.html