一、Singleton模式主要应用在一些特殊的类,在整个系统运行中,有且仅有一个实例的场景
二、Singleton模式分为单线程与多线程情况,当然多线程一样适应单线程
单线程:在这种情况下比较容易,因为你的程序你能保证在单线程下运行,所以不要考虑那么多情况
public class Singleton { private static Singleton instance; /// <summary> /// 拒绝类外的成员创建实例 /// </summary> private Singleton() { } /// <summary> /// 用属性公开实例对象 /// </summary> public static Singleton Instance { get { if (instance == null) { instance = new Singleton(); } return instance; } } }
多线程:因为在多线程环境时,在判断instance为null与创建实例之类,有可能存在多个线程同时进入判断,从而创建多个不同的实例,为了防止这种情况,
在判断instance为空时,增加双判断
public class Singleton { private static volatile Singleton instance; private static object lockHelper = new object(); /// <summary> /// 拒绝类外的成员创建实例 /// </summary> private Singleton() { } /// <summary> /// 用属性公开实例对象 /// </summary> public static Singleton Instance { get { if (instance == null) { lock (lockHelper) { if (instance == null) { instance = new Singleton(); } } } return instance; } } }
一个比较简单的实现:
public class Singleton { public static readonly Singleton instance = new Singleton(); private Singleton() { } }