單例模式:所謂單例模式就是確保類只有一個物件,並提供一個公共的訪問介面。下面根據概念分析單例模式。
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; } }