標籤:時機 建立 logs c# blog style 單例模式 new null
1.懶漢模式(延時載入,他是在需要的時候才建立對象)
1 public class Singleton 2 { 3 private static Singleton _Singleton = null; 4 private static object Singleton_Lock = new object(); 5 public static Singleton CreateInstance() 6 { 7 //Singleton _Singleton = null; 8 if (_Singleton == null)//對象初始化之後,不要再等待鎖了 9 {10 lock (Singleton_Lock)//保證lock的方法體同一時刻只有一個線程可以進入11 {12 if (_Singleton == null)//是保證第一次初始化之後,不再重複的初始化13 {14 _Singleton = new Singleton();15 }16 }17 }18 return _Singleton;19 }20 }
2.餓漢模式
1 public class Singleton2 {3 private static Singleton _Singleton = new Singleton();//載入類即執行個體化4 5 public static Singleton CreateInstance()6 {7 return _Singleton;8 }9 }
public class Singleton{ private static Singleton _Singleton = null; static Singleton()//類載入執行靜態建構函式 { _Singleton = new Singleton(); } public static Singleton CreateInstance() { return _Singleton; }}
懶漢和餓漢的本質區別,就是執行個體化對象的時機,餓漢即類載入就會執行個體化對象,懶漢則是使用時才會執行個體化
C# 單例模式