設計模式 單例設計模式

2021-08-15 18:06:49 字數 1690 閱讀 3298

單例模式是一種物件建立型模式,使用單例模式,可以保證為乙個類只生成唯一的例項物件。也就是說,在整個程式空間中,該類只存在乙個例項物件。   

gof對單例模式的定義是:保證乙個類、只有乙個例項存在,同時提供能對該例項加以訪問的全域性訪問方法。

單例模式,又稱單件模式。

定義:確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

2.1 startuml內部生成模式類圖

該類圖由startuml逆向生成c++**

class singleton ;

singleton* singleton::instance()

if(instance==null)

instance = new singleton();

return instance;

根據單例模式的定義,那麼實現這個需求,我們最簡單的方法是

①定義乙個全域性靜態物件,給系統使用。

②單例模式實現需求。

注:這兩個方都是可以滿足需求的,但是呢,想想6大原則:依賴倒置,介面隔離。我們的設計應當是依賴介面,而非物件,那麼久pass 刁①吧。

優點:乙個例項,減少記憶體開銷;減少系統開銷;避免對乙個資源的多重占用;設定全域性訪問點,優化和貢獻資源。

缺點:沒有藉口,擴充套件性差;不利於測試;與單一職責原則有衝突,單例模式把「要單例」和業務邏輯融合在乙個類中。

要求生成唯一序列號的環境;

共享資料或者共享訪問點;

建立乙個物件需要消耗的資源過多,如訪問io和資料庫等資源;

需要定義大量的靜態常量和靜態方法(工具類)

eg.當兩個執行緒執行至if(instance==null)時,可能產生執行緒安全問題

改進解決

class singleton ;

//對單例直接進行初始化,而不再方法instance中進行判斷。

singleton* singleton::instance = new singleton;

singleton* singleton::instance()

return instance;

class singleton ;

static int curnum = 0;

static listinstance_list;

}; singleton* singleton::instance()

random random = new random();

int count  = random.nextint(max);  //獲取隨機數

return instance_list.get(count); //隨機去除乙個例項來用

關於多例模式中的list的初始化:

方案:class singleton

else

protected:

singleton()

{}private:

static list_singletonlist;

};listsingleton::_singletonlist(null);

void main()

{singleton* a = singleton::getinstance();

singleton* b = singleton::getinstance();

設計模式 單例設計模式

歷史 最早是建築學領域的模式,然後gof四人由其引申到編碼方面,總結了23種設計模式 設計模式 解決某一類事情最行之有效的方法 2.1 體現 餓漢式,保證物件的唯一性 class singleton 私有化建構函式禁止該類建立物件 private static singleton st new si...

設計模式 單例設計模式

單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項。即乙個類只有乙個物件例項 單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。單例設計模式 解決的問題 可以保...

設計模式 單例設計模式

設計模式是對問題行之有效的解決方案,它其實是一種思想。單例設計模式 解決的問題 可以保證乙個類在記憶體中只能有乙個物件。比如多個程式使用相同的配置資訊物件時,就需要保證物件的唯一性 如何保證唯一性 1 不允許其他程式用new建立類物件 2 在該類中建立乙個本類例項 3 對外提供乙個方法讓其他程式可以...