C 設計模式 單例模式

2022-07-04 08:51:11 字數 2769 閱讀 2876

單例模式三種寫法:

第一種最簡單,但沒有考慮執行緒安全,在多執行緒時可能會出問題……

public

class

singleton

public

static

singleton createinstance()

}

第二種考慮了執行緒安全

public

class

singleton

public

static

singleton createinstance()

}return

_instance;}}

第三種飢餓懶漢模式

public

class

singleton

}

一、 單例(singleton)模式單例模式的特點:

單例模式應用:

二、 singleton模式的結構:

singleton模式包含的角色只有乙個,就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new直接例項它。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance()。instance方法負責檢驗並例項化自己,然後儲存在靜態成員變數中,以確保只有乙個例項被建立。(關於執行緒問題以及c#所特有的singleton將在後面詳細論述)。

三、 程式舉例:

該程式演示了singleton的結構,本身不具有任何實際價值。

public

class

singleton

public

static

singleton instance()

}class

program

}

四、 在什麼情形下使用單例模式:使用singleton模式有乙個必要條件:在乙個系統要求乙個類只有乙個例項時才應當使用單例模式。反過來,如果乙個類可以有幾個例項共存,就不要使用單例模式。

注意:不要使用單例模式訪問全域性變數。這違背了單例模式的用意,最好放到對應類的靜態成員中。

不要將資料庫連線做成單例,因為乙個系統可能會與資料庫有多個連線,並且在有連線池的情況下,應當盡可能及時釋放連線。singleton模式由於使用靜態成員儲存類例項,所以可能會造成資源無法及時釋放,帶來問題。

五、 singleton模式在實際系統中的實現

下面這段singleton**演示了負載均衡物件。在負載均衡模型中,有多台伺服器可提供服務,任務分配器隨機挑選一台伺服器提供服務,以確保任務均衡(實際情況比這個複雜的多)。這裡,任務分配例項只能有乙個,負責挑選伺服器並分配任務。

class

loadbalancer

//methods

public

static

loadbalancer getloadbalancer()

return

_balancer;

}//properties

public

string

server}}

class

program

}

六、 c#中的singleton模式c#的獨特語言特性決定了c#擁有實現singleton模式的獨特方法。這裡不再贅述原因,給出幾個結果:

方法一:

下面是利用.net framework平台優勢實現singleton模式的**:

sealed

class

singleton

public

static

readonly singleton instance = new

singleton();

}

這使得**減少了許多,同時也解決了執行緒問題帶來的效能上損失。那麼它又是怎樣工作的呢?

注意到,singleton類被宣告為sealed,以此保證它自己不會被繼承,其次沒有了instance的方法,將原來_instance成員變數變成public readonly,並在宣告時被初始化。通過這些改變,我們確實得到了singleton的模式,原因是在jit的處理過程中,如果類中的static屬性被任何方法使用時,.net framework將對這個屬性進行初始化,於是在初始化instance屬性的同時singleton類例項得以建立和裝載。而私有的建構函式和readonly(唯讀)保證了singleton不會被再次例項化,這正是singleton設計模式的意圖。

不過這也帶來了一些問題,比如無法繼承,例項在程式一執行就被初始化,無法實現延遲初始化等。

方法二:

既然方法一存在問題,我們還有其它辦法。

public

sealed

class

singleton

public

static

singleton getinstance()

class

nested

internal

static

readonly singleton instance = new

singleton();}}

設計模式 C 設計模式 單例模式

設計模式 物件導向設計七大原則 設計模式 設計模式概念和分類 設計模式 c 設計模式 單例模式 設計模式 c 設計模式 工廠方法模式 設計模式 c 設計模式 抽象工廠模式 設計模式 c 設計模式 建造者模式 設計模式 c 設計模式 原型模式 作者自用的泛型單例模組 單例模式 singleton pa...

C 設計模式 (單例模式)

單例模式 顧名思義,只有乙個物件例項,即保證乙個類只有乙個物件可以使用。作用類似於乙個全域性變數,可以任意呼叫,但是比全域性變數更容易管理,使用。單例模式也有很多種實現方式 第一種實現方法 h檔案 class csock test public casyncsocket cpp檔案 csock te...

設計模式 單例模式(c )

在gof 設計模式 中,單例模式的定義為 保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。下面是單例模式的c 實現 方案一 建構函式和拷貝建構函式一定要宣告為private 定義static成員 單例指標和獲取單例指標的函式 static單例指標要在類外定義並初始化 實現獲取單例指標的函式時...