前言設計模式
單例模式是老生常談的一種設計模式,同時它是最簡單也是最容易被忽視的一種設計模式。多線程
下面是一些我的見解:spa
(1) 單例類須要保證本身的惟一性,同時也須要避免被繼承,即須要使用sealed修飾;線程
(2) 餓漢式單例先建立好實例,懶漢式單例在須要的時候再建立實例,我的傾向於後者,由於單例模式通常管理着特定資源,懶漢式單例能夠避免在不須要資源的時候也會建立實例;設計
(3) 懶漢式單例須要在多線程環境下保持惟一性,所以須要在建立實例時加鎖,對私有實例作雙重判空(加鎖前、加鎖後),避免建立多個實例;blog
(4) 對於資源依賴強的單例,須要使用Dispose模式(實現IDisposable接口)。繼承
一、單例模式UML圖接口
二、傳統單例C#實現資源
public class Singleton { private static Singleton _instance; private Singleton() { } public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } }
三、演進單例C#實現get
public sealed class Singleton { private static Singleton _instance; private static readonly object LockHelper = new object(); private Singleton() { } public static Singleton Instance { get { if (_instance != null) { return _instance; } lock (LockHelper) { _instance = _instance ?? new Singleton(); } return _instance; } } }