什么是单例模式:保证一个类只能有一个实例对象存在,并提供一个全局的访问点;
应用环境:只需要一个对象,一个实例的时候
例如:WinForm只能创建一个窗体的时候;只需要一个实例对象的时候
代码:
public class Singleton { //通过静态的私有变量来判定是否类的实例化是否唯一 private static Singleton myInstancd; private Singleton() { } //定义全局的方法提供类的外部访问 public static Singleton GetInstance() { //如果为空则实例化对象,否则返回该对象 if(myInstancd==null) { myInstancd = new Singleton(); } return myInstancd; } }
缺点:在多线程的时候两条线程同时访问会都为空,会创建多个实例
解决办法:加锁
public class Singleton { //通过静态的私有变量来判定是否类的实例化是否唯一 private static Singleton myInstancd; //判定是否加锁保证线程同步 private static readonly object myLock = new object(); private Singleton() { } //定义全局的方法提供类的外部访问 public static Singleton GetInstance() { //lock加锁的时候线程会挂起,不会出现多个实例对象 lock (myLock) { //如果为空则实例化对象,否则返回该对象 if (myInstancd == null) { myInstancd = new Singleton(); } } return myInstancd; } }