C 單例模式的多種簡單實現

2022-09-22 08:56:43 字數 1502 閱讀 4878

什麼是單例模式?

這裡我就不做過多的解釋了, 畢竟關於singleton的資料實在是太多太多了。點選這裡

1.簡單的思路就是, 建立物件單例的動作轉移到另外的行為上面, 利用一個行為去建立物件自身, 如下: 

public class singleton

return _singleton;}}

這樣寫看上去是沒有問題, 但是有沒有那種可能, 同時兩個動作都判斷這個物件為空, 那麼這個物件就會被建立2次?是的, 多執行緒中, 這樣是無法保證單例。

就像這樣, 同時建立多個執行緒去建立這個物件例項的時候, 會被多次建立, 這個時候, 對**改進一下。

public class singleton

}return _singleton;}}

除錯**:

taskfactory taskfactory = new taskfactory();

listtasklist = new list();

for (int i = 0; i < 5; i++)

));}

結果:

上面, 我們建立了多個執行緒,同時去建立這個物件的例項, 在第二次,物件命名已經被建立了, 儘管只建立了一次滿足了我們的需求, 但是我們已知物件被建立了, 還需要進來做不必要的動作嗎?

我們都知道, 同步鎖為了達到預期的效果, 也是損耗了效能的, 那麼下面的輸出, 很顯然是沒必要的動作, 所以我們優化一下。

public class singleton}}

return _singleton;}}

結果:

很顯然, 這樣達到了我們的預期, 物件在被建立後, 就沒必要做多餘的行為。

利用靜態變數實現單例模式

public class singletonthird

}

是不是覺得很優雅, 利用靜態變數去實現單例,  由clr保證,在程式第一次使用該類之前被呼叫,而且只呼叫一次

ps: 但是他的缺點也很明顯, 在程式初始化後, 靜態物件就被clr構造了, 哪怕你沒用。

利用靜態建構函式實現單例模式

public class singletonsecond

public static singletonsecond createinstance()

}

靜態建構函式:只能有一個,無引數的,程式無法呼叫 。

同樣是由clr保證,在程式第一次使用該類之前被呼叫,而且只呼叫一次

同靜態變數一樣, 它會隨著程式執行, 就被例項化, 同靜態變數一個道理。

c 中的單例模式

class csingleton static csingleton m pinstance public static csingleto...

C 中的單例模式

單例模式 一個類只有一個例項物件,c 一般的方法是將建構函式 拷貝建構函式以及賦值操作符函式宣告為private級別,從而阻止使用者例項化一個類。那麼,如何才能獲得該類的物件呢?這時,需要類提供一個public static的方法,通過該方法獲得這個類唯一的一個例項化物件。這就是單例模式基本的一個思想...

C 單例模式的三種寫法

第一種最簡單,但沒有考慮執行緒安全,在多執行緒時可能會出問題,不過俺從沒看過出錯的現象,表鄙視我 public class singleto...