還是看代碼能讓我靜下心來。我現在語言表達能力嚴重下降,又不自信。fuck,不想了,我還是我,世上獨一無二的我。走自己的路,讓別人看吧。馬上4月了,天也變熱了! 閑話少扯,今天說單例模式,就算22種模式都不知道,也應該知道單例模式,這個在實際項目中用的比較多。 一個應用是一個進程,在記憶體中分配一定的空 ...
還是看代碼能讓我靜下心來。我現在語言表達能力嚴重下降,又不自信。fuck,不想了,我還是我,世上獨一無二的我。走自己的路,讓別人看吧。馬上4月了,天也變熱了!
閑話少扯,今天說單例模式,就算22種模式都不知道,也應該知道單例模式,這個在實際項目中用的比較多。
一個應用是一個進程,在記憶體中分配一定的空間。如果想讓某個實例在這個空間中獨一無二,就需要用單例模式即棧中的地址和堆中的數據是同一個。
創建模式意思就是創建對象的方法。
算了,直接上例子吧,我來解釋例子。網上說單例模式有很多種寫法,現在只說比較經典的模式吧。
class Singleton
{
//靜態對象的生存期比較長,直到進程結束,空間釋放。
private static Singleton instance;
//一個托管堆得地址
private static readonly object syncRoot = new object();
//如果一個類的構造函數是私有的,那外界就沒法New 這個對象(只要有顯式構造函數,就會隱藏掉預設的構造函數【預設靜態構造函數除外】)
private Singleton()
{
}
//這種寫法叫做雙重鎖
public static Singleton GetInstance()
{
if (instance == null)
{
//多線程訪問的時候,排隊,如果沒有鎖每一處的代碼都有可能多個線程同時訪問到。
lock (syncRoot)
{
//再次判斷,避免重覆創建對象
if (instance == null)
{
instance = new Singleton();//外界無法New 但是本類中是可以new的
}
}
}
return instance;//返回的就是記憶體中獨一無二的靜態那個實例。
}
}
總結:這個單例模式還是比較簡單的。要明白生存周期,指時間上的概念,作用域是空間上的概念。