6步 實現 mysql8.0 MGR架構
阿新 • • 發佈:2022-04-06
單例模式是用來保證程序中,某個類只有一個例項。因為有時候某個類很佔用資源,例如:資料庫連線、或者是類在構造的時候很耗費資源和時間。
單例模式的實現分為兩種:餓漢式和懶漢式。前者是在靜態建構函式執行時就立即例項化,後者是在程式執行過程中第一次需要時再例項化。
懶漢式
/// <summary> /// 懶漢式 /// </summary> public class Singleton { private Singleton() //私有化建構函式,避免外部建立 { long lResult = 0; for (int i = 0; i < 1000000; i++) { lResult += i; } Thread.Sleep(2000); Console.WriteLine($"{this.GetType().Name}被構造一次!"); } /// <summary> /// 靜態變數 (定義成靜態變數,保障全域性唯一) /// </summary> private static volatile Singleton _singleton = null; //volatile 促進執行緒安全 private static object sinletonLock = new object(); /// <summary> /// 公開的靜態方法提供物件例項 /// </summary> /// <returns></returns> public static Singleton CreateInstance() { //解決多執行緒呼叫時執行緒不在進行加鎖然後進行判斷。 if (_singleton == null) { lock (sinletonLock) { //保證只被例項化一次 if (_singleton == null) { _singleton = new Singleton(); } } } return _singleton; } }
懶漢式單例主要包括三部分:
1.私有化建構函式,避免外部建立。
2.公開的靜態方法提供物件例項。
3. 靜態變數 (定義成靜態變數,保障全域性唯一)。
餓漢式
public class Singleton { private static readonly Singleton _instance; static Singleton() { _instance = new Singleton(); } public static Singleton Instance { get { return _instance; } } }
餓漢式是在靜態建構函式中立即進行例項化。注意,為了確保單例性,需要使用 readonly 關鍵字宣告例項不能被修改。
以上寫法可簡寫為:
public class Singleton { private static readonly Singleton _instance = new Singleton(); public static Singleton Instance { get { return _instance; } } }
在 C# 7 中還可以進一步簡寫,一句程式碼就搞定了,此寫法如下:
public class Singleton { public static Singleton Instance { get; } = new Singleton(); }