單例模式屬於創建型設計模式,通過單例模式可以保證系統中一個類隻有一個實例,即一個類隻有一個對象實例。使用單例模式的有很多原因,比如對象實例化需要的時間比較久,並且系統長時間,或經常使用該對象時,這種情況可以考慮使用單例模式,這樣會節約一定的時間。下面是線程安全模式的單例模式,
經典款:
public class Singlenton { private static readonly Object _lock = new object(); private static Singlenton _instance=null; private Singlenton() { Thread.Sleep(5000);//模擬對象實例時需要比較長的時間 } public static Singlenton CreatInstance() { if (_instance==null) //減少線程等待 { lock (_lock) //線程安全 --多線程同時訪問時,會在這裡排隊等待 { if (_instance==null) //保證系統內這類隻有一個實例 { _instance = new Singlenton(); } } } return _instance; } }
靜態構造函數實現方式:
public class SinglentonStatic { private static SinglentonStatic _instance = new SinglentonStatic(); private static SinglentonStatic() { Thread.Sleep(5000);//模擬對象實例時需要比較長的時間 } public static SinglentonStatic CreatInstance() { return _instance; } }
單例模式創建實例對象後,多個線程同時使用對象的屬性時,會出現線程並發的問題。