設計模式 享元模式 C 實現

2021-07-28 16:42:11 字數 1158 閱讀 2444

享元模式(flyweight pattern)主要用於減少建立物件的數量,減少記憶體占用和提高效能。這種設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。

享元模式嘗試重用現有的類物件,如果未找到匹配的物件則建立新的物件。

意圖

運用共享技術有效的支援大量細粒度的物件。

解決問題

在有大量物件時,有可能會造成棧溢位,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接返回記憶體中已有的物件,避免重新建立物件。

如何解決

用唯一標識碼判斷,如果在記憶體中有,則返回這個唯一標示嗎所標識的物件。

優點

大大減少物件的建立,減低 系統的記憶體,使效率更高。

缺點

提高了系統的複雜程度,需要分離外部狀態和內部狀態,而且外部狀態具有固有化的性質,不應該隨著內部變化而變化,否則會造成系統的混亂。

使用場景

1.系統有大量相似的物件

2.需要緩衝池的場景

注意事項

1. 注意劃分外部狀態和內部狀態,否則可能引起執行緒安全的問題

2. 這些類必須有乙個工廠物件加以控制

享元模式結構圖

c++實現

//享元模式 

class flyweight //抽象的享元類

;class concreteflyweight : public flyweight //共享的子類

flyweight* getflyweight(string key)

map::size_type countn()//返回當前可共享的模組數

};

客戶端:

int  test_flyweight()  //享元模式 

實現設計模式 享元模式

享元模式其實類似於物件池。如果系統中有大量的細粒度物件,建立這些物件是不小的開銷。如果能共享和反覆使用這些物件,那麼就可以減少物件數量,提高系統效能。下面實現了乙個享元工廠,可以作為參考。include include namespace dp t get const param param ret...

設計模式C 實現(9) 享元模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

設計模式C 實現(9) 享元模式

分類 軟體設計模式c 實現 2011 08 11 08 41 26人閱讀收藏 舉報 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式...