文章出處
文章列表
在今天,讀書有時是件“麻煩”事。它需要你付出時間,付出精力,還要付出一份心境。--僅以《大話設計模式》來祭奠那逝去的……
單例模式:保證一個類只有一個實例,并聽一個訪問它的全局訪問點;單例的實現分為兩種,懶漢式單例模式和餓漢式單例模式
1.懶漢式單例模式
public class Singleton { private static Singleton instance; //進程輔助對象,多線程同時訪問該類時,對該對象加鎖,只有一個線程可以進入 private static readonly object syncRoot = new object(); /// <summary> /// 定義個私有的構造方法,防止外界通過new創建該類的實例 /// </summary> private Singleton() { } /// <summary> /// 獲取本類實例的唯一全局訪問點 /// </summary> public static Singleton GetInstance() { //先判斷實例是否存在,不存在再加鎖,提高訪問性能 if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } public void Action() { Console.WriteLine("我是單例的具體業務……"); } }
2.餓漢式單例模式
/// <summary> /// 防止派生,派生可能會增加實例 /// </summary> public sealed class Singleton { //由于定義為readonly,意味著只能在靜態初始化期間或者構造函數中分配變量 private static readonly Singleton instance = new Singleton(); /// <summary> /// 定義個私有的構造方法,防止外界通過new創建該類的實例 /// </summary> private Singleton() { } /// <summary> /// 獲取本類實例的唯一全局訪問點(由于定義了靜態的只讀變量,因此不需要考慮線程安全問題) /// </summary> public static Singleton GetInstance() { return instance; } public void Action() { Console.WriteLine("我是單例的具體業務……"); } }
開啟場景模擬
static void Main(string[] args) { Singleton.GetInstance().Action(); }
文章列表
全站熱搜