单例模式(Singleton)
定义
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
类图
描述
类Singleton的构造函数的修饰符为private,防止用户使用new创建此类的实例;
定义一个静态的GetInstance方法,负责创建唯一的实例,并允许用户访问它的唯一实例。
应用场景
懒汉模式:第一次调用的时候才产生一个新的实例,并在以后返回此实例。
非线程安全的单例模式
public sealed class Singleton { private static Singleton instance; /// <summary> /// 私有的构造函数 /// </summary> private Singleton() { } public static Singleton GetInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
线程安全的单例模式,需加线程锁
public sealed class Singleton { private static Singleton instance; private static readonly object syncFlag = new object(); /// <summary> /// 私有的构造函数 /// </summary> private Singleton() { } public static Singleton GetInstance() { lock (syncFlag) { if (instance == null) { instance = new Singleton(); } } return instance; } }
线程安全的单例模式,双重锁定
public sealed class Singleton { private static Singleton instance; private static readonly object syncFlag = new object(); /// <summary> /// 私有的构造函数 /// </summary> private Singleton() { } public static Singleton GetInstance() { if (instance == null) { lock (syncFlag) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
饿汉模式:在程序开始的时候就会产生一个新的实例,并在以后返回此实例。
线程安全的单例模式,静态初始化
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); /// <summary> /// 私有的构造函数 /// </summary> private Singleton() { } public static Singleton GetInstance() { return instance; } }