C 設計模式系列(一) 單例模式

2021-08-07 17:34:18 字數 1303 閱讀 1146

在gof的《設計模式 可復用物件導向軟體的基礎》中一共講解了23種設計模式,我們在各種**和框架中或多或少的發現他們的影子,為了更好的掌握這些設計模式,我們將以c++**的形式在博文中做乙個總結。

一、單例模式

1.引言

單例模式是在各種設計模式中最基礎的乙個設計模式,因為只涉及到乙個類,所以也是最簡單的乙個設計模式,單例模式的主要意圖和動機是什麼呢?我們可以看下《設計模式 可復用物件導向軟體的基礎》中是怎麼說的:

2. 意圖

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

3. 動機

對一些類來說,只有乙個例項是很重要的。雖然系統中可以有許多印表機,但卻只應該

有乙個列印假離線( printer spooler),只應該有乙個檔案系統和乙個視窗管理器。乙個數字濾

波器只能有乙個 a/d轉換器。乙個會計系統只能專用於乙個公司。

我們怎麼樣才能保證乙個類只有乙個例項並且這個例項易於被訪問呢?乙個全域性變數使

得乙個物件可以被訪問,但它不能防止你例項化多個物件。

乙個更好的辦法是,讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可

以被建立(通過擷取建立新物件的請求)    ,並且它可以提供乙個訪問該例項的方法。這就是

singleton模式。

4.實現

這個類要保證沒有其他例項可以被建立,則該類應該顯示的定義建構函式,且建構函式為private或者protected;

提供乙個訪問該例項的方法,該例項必須唯一且能夠被訪問,該例項可以被宣告為私有的靜態成員,則應該提供乙個公共的方法來訪問該例項;

5.類圖

根據以上闡述,可以畫出該模式的類圖為:

我們可以得到實現單例模式的**為:

#include class singleton 

return m_instance;

} static void destroyinstance() }

private:

singleton();

static singleton *m_instance;

};singleton* singleton::m_instance = null;

int main(void)

7.總結

以上為根據單例模式的定義寫的**為最簡單的形式,只為說明單例模式,但是在實際專案中,情況比較複雜,如考慮執行緒安全等等,以後遇到各種情況還會做相應的補充。

設計模式系列一 單例模式

單例模式 主要用於保證乙個類只有乙個例項,對外提供乙個全域性的訪問點來獲取該例項。是所有設計模式中最簡單的模式。實現 c using system using system.collections.generic using system.linq using system.text namespa...

設計模式系列 單例模式

單例模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。什麼情況下需要單例模式?一些類提供公共功能供別人呼叫,本身不會處理業務邏輯 類會被許多類和執行緒呼叫 單例模式的一些注意點 單例的生存期超長,會導致記憶體的持續占用。單例在多執行緒環境需要小心的處理執行緒互斥,進行資源保護。單例在類的繼承樹中...

設計模式系列 單例模式

單例模式就是指單例類在一定的生命週期內只能有乙個物件例項,單例類的建立必須是本身,並能給使用者提供自身。在現實世界中,每個生命體都可以被看做是乙個單例物件,唯一且具體,具有不可複製性。同樣的,在軟體開發領域中,有時我們需要保證客戶端在當前的客戶機上只能執行乙個例項這個時候,我們就應該考慮使用單例模式...