【設(shè)計(jì)模式】單例模式

定義

確保某個(gè)類只有一個(gè)實(shí)例

實(shí)現(xiàn)方式

餓漢式加載(線程安全)

public sealed class Singleton
{
    private static Singleton _instance = new Singleton();
    //將構(gòu)造函數(shù)設(shè)置私有,外部不能new
    private Singleton() { }
    public static Singleton Instance => _instance;
}

等價(jià)于

public sealed class Singleton
{
    private static Singleton _instance;
    static Singleton()
    {
        _instance = new Singleton();
    }
    //將構(gòu)造函數(shù)設(shè)置私有,外部不能new 
    private Singleton() { }
    public static Singleton Instance => _instance;
}

懶漢式加載

  • 非線程安全
public sealed class Singleton
{
    private static Singleton _instance;
    private Singleton() { }
    public static Singleton Instance => _instance = _instance ?? new Singleton();
}
  • 線程安全
  1. Double Check
public sealed class Singleton
{
    private static readonly object _lock = new object();
    private static Singleton _instance;
    private Singleton()
    {
        Console.WriteLine("Singleton Constructor");
    }
    public static Singleton Instance
    {
        get
        {
            /// 避免走內(nèi)核代碼
            if (_instance != null) return _instance;

            lock (_lock)
            {
                if (_instance == null)
                {
                    var temp = new Singleton();
                    //確保_instance寫入之前,Singleton已經(jīng)初始化完成
                    System.Threading.Volatile.Write<Singleton>(ref _instance, temp);
                }
            }
            return _instance;
        }
    }
}
  1. 借助Lazy
public sealed class Singleton
{
    private static Lazy<Singleton> _instance = new Lazy<Singleton>(() => new Singleton(), true);
    private Singleton()
    {
        Console.WriteLine("Singleton Constructor");
    }
    public static Singleton Instance => _instance.Value;
}

示例代碼 - github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容