靜態初始化策略
public
sealed
class singleton
private
static
readonly singleton instance = new singleton();
public
static singleton instance()}}
在此策略中,將在第一次引用類的任何成員時建立例項。公共語言執行庫負責處理變數初始化。該類標記為 sealed 以阻止發生派生,而派生可能會增加例項。有關將類標記為 sealed 的利與弊的討論,請參閱 [sells03]。此外,變數標記為 readonly,這意味著只能在靜態初始化期間(此處顯示的示例)或在類建構函式中分配變數。
該實現與前面的示例類似,不同之處在於它依賴公共語言執行庫來初始化變數。它仍然可以用來解決 singleton 模式試**決的兩個基本問題:全域性訪問和例項化控制。公共靜態屬性為訪問例項提供了乙個全域性訪問點。此外,由於建構函式是私有的,因此不能在類本身以外例項化 singleton 類;因此,變數引用的是可以在系統中存在的唯一的例項。
由於 singleton 例項被私有靜態成員變數引用,因此在類首次被對 instance 屬性的呼叫所引用之前,不會發生例項化。因此,與 design patterns 形式的 singleton 一樣,該解決方案實現了懶例項化屬性的一種形式(lazysingleton)。
這種方法唯一的潛在缺點是,您對例項化機制的控制權較少。在 design patterns 形式中,您能夠在例項化之前使用非預設的建構函式或執行其他任務。由於在此解決方案中由 .net framework 負責執行初始化,因此您沒有這些選項。在大多數情況下,靜態初始化是在 .net 中實現 singleton 的首選方法。
C 實現Singleton模式
單例模式定義 保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。類的宣告 class singleton singleton singleton m instance nullptr 解法1 執行緒非安全版本 singleton singleton getinstance return m i...
Singleton模式在C 與C 中的實現
singleton 應該可以算是 gof的 23個模式中最簡單的乙個模式了,它有兩個要求 一是保證乙個類僅有乙個例項 二是提供乙個訪問它的全域性訪問點。這在實現中分別對應為 一是建構函式非 public 二是提供乙個靜態函式作為全域性訪問點。在 c 中,我們可以這麼寫 public class ex...
Singleton模式在C 與C 中的實現
singleton 應該可以算是 gof的 23個模式中最簡單的乙個模式了,它有兩個要求 一是保證乙個類僅有乙個例項 二是提供乙個訪問它的全域性訪問點。這在實現中分別對應為 一是建構函式非 public 二是提供乙個靜態函式作為全域性訪問點。在c 中,我們可以這麼寫 public class exa...