單例模式(Singleton) 類圖 描述 單例模式: 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點; 構造函數修飾符為private。 應用場景 懶漢模式:第一次調用的時候才產生一個新的實例,併在以後返回此實例。 非線程安全的單例模式 線程安全的單例模式,需加線程鎖 線程安全的單例模式,雙 ...
單例模式(Singleton)
類圖
描述
單例模式:
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點;
構造函數修飾符為private。
應用場景
懶漢模式:第一次調用的時候才產生一個新的實例,併在以後返回此實例。
非線程安全的單例模式
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; } }