單例模式是老生常談的一種設計模式,同時它是最簡單也是最容易被忽視的一種設計模式。單例類應該是密封類,不能被繼承,同時建議在任何情況下都要保證線程安全。 ...
前言
單例模式是老生常談的一種設計模式,同時它是最簡單也是最容易被忽視的一種設計模式。
下麵是一些個人看法:
(1) 單例類需要保證自己的唯一性,同時也需要避免被繼承,即需要使用sealed修飾;
(2) 餓漢式單例先創建好實例,懶漢式單例在需要的時候再創建實例,個人傾向於後者,因為單例模式一般管理著特定資源,懶漢式單例可以避免在不需要資源的時候也會創建實例;
(3) 懶漢式單例需要在多線程環境下保持唯一性,因此需要在創建實例時加鎖,對私有實例做雙重判空(加鎖前、加鎖後),避免創建多個實例;
(4) 對於資源依賴強的單例,需要使用Dispose模式(實現IDisposable介面)。
1、單例模式UML圖
2、傳統單例C#實現
public class Singleton { private static Singleton _instance; private Singleton() { } public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } }
3、演進單例C#實現
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; } } }