單例模式

定義:

一個類中只有一個實例,爲所有需要訪問此類的提供唯一一個全局的實例。

應用場景:

整個系統中只有一個實例,需要有二個以上的不適用。對應全局常量變量和數據庫的連接不適用使用單例

優點:

防止不同的對象對類進行實例化

缺點:

沒有銷燬實例對應的解決方式。

具體的代碼如下:

懶漢模式,這個在多線程下保證了只要一個實例的情況。當兩個線程同是進入_instanced==null代碼中,首先訪問到lock(lockCreate)會鎖住當前的lockCreate實例,使得下個線程等待其執行完成創建了實體纔可進入,保證了此線程外的其他線程通過_instance==null判斷爲false,從而不會重複創建線程。第一次調用CreateInstance方法創建實例,後面訪問的就直接調用而無需創建實例。

public class Singleton
{
    private volatile static Singleton _instance = null;
    private static readonly object lockCreate = new object();
    private Singleton(){}
    public static Singleton CreateInstance()
    {
        if(_instance == null)
        {
            lock(<span style="font-family: Arial, Helvetica, sans-serif;">lockCreate</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span>
            {
                if(_instance == null)
                     _instance = new Singleton();
            }
        }
        return _instance;
    }
}

餓漢模式,這個是在靜態構造函數中就初始化創建,在C#的CRL中內置解決了併發性的問題,訪問加載這個類是就實例化單例類。

public sealed class Singleton
{
        private static readonly Singleton instance=new Singleton();

        public static Singleton GetInstance()
        {
               return instance;
        }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章