C#設計模式--單例模式
阿新 • • 發佈:2017-10-09
資源 let readonly eat 私有靜態變量 sta 技術分享 span ret
目的:避免對象的重復創建
單線程具體的實現代碼
/// <summary> /// 私有化構造函數 /// </summary> public class Singleton { private Singleton() {//構造函數可能耗時間,耗資源 } public static Singleton CreateInstance() { if (_Singleton == null) { _SingletonView Code= new Singleton(); } return _Singleton; } }
多線程具體的實現代碼--雙if加lock
/// <summary> /// 私有化構造函數 /// 私有靜態變量保存對象 /// </summary> public class Singleton { private Singleton() {//構造函數可能耗時間,耗資源 } private staticView CodeSingleton _Singleton = null; private static readonly object locker = new object();//加鎖 //雙if加lock public static Singleton CreateInstance() { if (_Singleton == null)//保證對象初始化之後不需要等待鎖 { lock (locker)//保證只有一個線程進去判斷 {if (_Singleton == null) { _Singleton = new Singleton(); } } } return _Singleton; } }
另外的實現方法
第一種:
public class SingletonSecond { private SingletonSecond() {//構造函數可能耗時間,耗資源 } private static SingletonSecond _Singleton = null; static SingletonSecond()//靜態構造函數,由CLR保證在第一次使用時調用,而且只調用一次 { _Singleton = new SingletonSecond(); } public static SingletonSecond CreateInstance() { return _Singleton; } }View Code
第二種:
public class SingletonThird { private SingletonThird() {//構造函數可能耗時間,耗資源 } private static SingletonThird _Singleton = new SingletonThird(); public static SingletonThird CreateInstance() { return _Singleton; } }View Code
C#設計模式--單例模式