单例模式:主要关注三点:
1. 私有化构造器。
2. 静态公有方法方法,返回唯一实例。
3. 防止多线程程序并发导致的多实例的问题。
/// <summary> /// 单例模式. /// </summary> public class Singleton { private static Singleton instance; /// <summary> /// 程序运行时,创建一个静态只读的进程辅助对象 /// </summary> private static readonly object _object = new object(); /// <summary> /// 构造方法私有,外部不能通过New类实例化此类 /// </summary> private Singleton() { } /// <summary> /// 静态方法:唯一全局访问点,这里有两个 instance==null的判断 /// </summary> /// <returns></returns> public static Singleton GetInstance() { //先判断实例是否存在,不存在再加锁处理 if (instance == null) { //在同一时刻加了锁的那部分程序只有一个线程可以进入, lock (_object) { //如实例不存在,则New一个新实例,否则返回已有实例 if (instance == null) { instance = new Singleton(); } } } return instance; } }
还有一种写法:
不用考虑多线程的问题。代码更简单。
/// <summary> /// 单例模式. /// </summary> public sealed class Singleton { private static readonly Singleton instance = null; /// <summary> /// 静态初始化是在 .NET 中实现 Singleton 的首选方法 /// </summary> static Singleton() { instance = new Singleton(); } private Singleton() { } public static Singleton Instance { get { return instance; } } }