單例模式是一種物件建立型模式,使用單例模式,可以保證為乙個類只生成唯一的例項物件。也就是說,在整個程式空間中,該類只存在乙個例項物件。
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 對外提供乙個方法讓其他程式可以...