單例模式 一、定義 定義:確保一個類只有一個實例,並提供一個全局訪問點。 理解:保證一個類只有一個實例的一種實現方法(該方法就是為了降低對象之間的耦合度)。 二、代碼塊 1、舉個慄子,拿多線程為慄子,具體看代碼註釋。上代碼~ 二、總結 1、單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提 ...
單例模式
一、定義
定義:確保一個類只有一個實例,並提供一個全局訪問點。
理解:保證一個類只有一個實例的一種實現方法(該方法就是為了降低對象之間的耦合度)。
二、代碼塊
1、舉個慄子,拿多線程為慄子,具體看代碼註釋。上代碼~
namespace 單例模式Test { public class TestClass { // 定義一個靜態變數來保存類的實例 private static TestClass Car; // 定義一個標識確保線程同步 private static readonly object locker = new object(); // 定義私有構造函數,使外界不能創建該類實例 private TestClass() {} /// <summary> /// 定義公有方法提供一個全局訪問點,同時你也可以定義公有屬性來提供全局訪問點 /// </summary> /// <returns></returns> public static TestClass GetCar() { if (Car == null) { // 當第一個線程運行到這裡時,此時會對locker對象 "加鎖", // 當第二個線程運行該方法時,首先檢測到locker對象為"加鎖"狀態,該線程就會掛起等待第一個線程解鎖 // lock語句運行完之後(即線程運行完之後)會對該對象"解鎖" lock (locker) { // 如果類的實例不存在則創建,否則直接返回 if (Car == null) { Car = new TestClass(); } } } return Car; } } }
二、總結
1、單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例
2、單例模式是通過private
限定,避免了類在外部被實例化