面向對象設計模式 總結歸納 02【單例模式】
阿新 • • 發佈:2018-05-08
ola 傳遞 單件 面向對象設計 線程 turn span ont rap
單例模式【單件模式】【Singleton Pattern】
保證一個類僅有一個實例,並提供一個該實例的全局訪問點。
示例1:
C# Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class Singleton { public static readonly Singleton Instance; /// <summary> /// 靜態構造器,能保證多線程安全。多線程狀態下,只有一個線程能訪問靜態構造器。 /// 靜態構造器,只能實現一個無參數的靜態構造函數。 /// 可有使用屬性,進行實例化的參數傳遞。或者使用方法實現。 static Singleton() { Instance = new Singleton(); } private Singleton() { } } |
示例2:【示例1的簡化寫法】
C# Code
1 2 3 4 5 6 |
class Singleton { public static readonly Singleton Instance = new Singleton();//能夠自動生成靜態構造函數。 private Singleton() { } } |
示例3:【帶參數】
C# Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/// <summary> /// 多線程單例模式,帶參數 /// </summary> public class Singleton { private static volatile Singleton instance = null;//防止編譯器微調。 private static object lockHelper = private Singleton(int i) { } public static Singleton GetInstance(int i) { if (instance == null) { lock (lockHelper)//加鎖 { if (instance == null)//雙檢查 { instance = new Singleton(i); } } } return instance; } } |
面向對象設計模式 總結歸納 02【單例模式】