設計模式一(單例模式)

weixin_30639719發表於2020-04-05

單例模式:所謂單例模式就是確保類只有一個物件,並提供一個公共的訪問介面。下面根據概念分析單例模式。

1、確保一個例項,就是不讓程式隨處可以new一個物件,這個怎麼實現呢?運用私有建構函式。

public class Singleton
{
    private Singleton()
    {

    }  
}

這樣Singleton就不能new物件了。

2、唯一的物件在何處?在內部定義一個靜態的Singleton物件,為什麼要定義靜態的呢,因為靜態物件屬於類。然後提供一個公共的訪問介面即可

public class Singleton
{
    private Singleton()
    {

    }  
    
    private static Singleton singleton;
    
    public static Singleton GetInstance()
    {
        if(singleton==null)
        {
            singleton=new Singletion();
        }
        
        return singleton;
    }
}
單例模式就算完成了,但是這裡存在個問題,對於多執行緒,可能同時存在幾個執行緒同時走到if(singleton==null)這兒,這樣就會new出多個singleton例項,這也不能保證其唯一。對於這種多執行緒的情況,我們可以加程式鎖機制,確保在判斷這兒只會有一個執行緒訪問,改進如下:
public class Singleton
{
    private Singleton()
    {

    }  
    
    private static Singleton singleton;
    //執行緒鎖
    private static readonly object lockObj=new object();

    public static Singleton GetInstance()
    {
        //雙重判斷是為了提高效能
        if(singleton==null)
        {
            lock(lockObj)
            {
                if(singletion==null)
                {
                    singleton=new Singletion();
                }
            }
        }
        
        return singleton;
    }
}

 

 


 

轉載於:https://www.cnblogs.com/session0827/p/5513736.html

相關文章