設計模式之單例模式C#實現

前言設計模式

單例模式是老生常談的一種設計模式,同時它是最簡單也是最容易被忽視的一種設計模式。多線程

下面是一些我的見解:spa

(1) 單例類須要保證本身的惟一性,同時也須要避免被繼承,即須要使用sealed修飾;線程

(2) 餓漢式單例先建立好實例,懶漢式單例在須要的時候再建立實例,我的傾向於後者,由於單例模式通常管理着特定資源,懶漢式單例能夠避免在不須要資源的時候也會建立實例;設計

(3) 懶漢式單例須要在多線程環境下保持惟一性,所以須要在建立實例時加鎖,對私有實例作雙重判空(加鎖前、加鎖後),避免建立多個實例;blog

(4) 對於資源依賴強的單例,須要使用Dispose模式(實現IDisposable接口)。繼承

一、單例模式UML圖接口

EA類圖

二、傳統單例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;
        }
    }
}
相關文章
相關標籤/搜索