享元模式是池技術(string常量池、資料庫連線池、緩衝池等)的重要實現方式,可以減少應用程式建立物件,降低程式記憶體的占用,提高效能。
使用共享物件,有效的大量細粒度的物件
1.flyweight:抽象享元角色,同時定義出物件的外部和內部狀態的介面或實現
2.concreteflyweight:具體享元角色,實現flyweight定義的業務
3.flyweightfactory:享元工廠,負責管理物件池和建立享元物件
我們都知道京東618狂歡節,還有天貓雙十一,賣的東西都很便宜(也有很多套路,比如先漲價再打折…)。「剁手黨」們近乎瘋狂的掃貨,更有甚者不但「剁手」,還「剁腳」。每個人的訂單都生成乙個商品物件,那就直接out of memory了。
這是乙個商品介面,定義了商品的**標籤
public
inte***ce
igoods
2.concreteflyweight具體享元角色
商品類實現igoods介面,其中name為內部狀態,version為外部狀態(內部狀態指物件共享出來的資訊,儲存在享元物件內部不會因為環境改變;外部狀態指物件得以依賴的標記,隨環境改變、不可共享)
public
class
goods
implements
igoods
@override
public
void
showgoodprice
(string version)
else
if(version.
equals
("頂配版"))
}}
3.flyweightfactory享元工廠
建立商品物件,並以map來儲存。將內部狀態name作為key,如果存在就繼續存,否則就建立新的
public
class
goodsfactory
else
}}
4.客戶端呼叫
通過享元工廠的getgoods方法來建立物件,並呼叫goods中的showgoodprice方法來顯示**
public
class
enjoyclient
}
優點:
減少了物件的建立,降低了程式記憶體的占用,提高效率
缺點:
提高了系統的複雜度。需要分離出內部狀態和外部狀態,而外部狀態具有固化特性,不應該隨著內部狀態的改變而改變
1.系統中存在大量的相似物件
2.需要緩衝池的場景
1.運用共享技術有效地支援大量細粒度物件的復用
2.享元工廠實際就做了兩件事:維護享元池;提供乙個遍歷key返回物件的方法
3.從某種意義上來講,享元模式就是單例模式+工廠模式
設計模式學習筆記 享元模式
享元模式英文叫flyweight pattern。flyweight,應該是乙個來自於拳擊術語,最輕量級,也叫蠅量級。次奧,我看 大話設計模式 這本書的時候,一直錯看成 亨元模式,搞不懂為什麼叫這個名字。現在看清楚了,是享元,共享的享,就比較好理解了。享元模式,就是共享 重用一些現成的物件,免得構造...
設計模式之享元模式
1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...
設計模式之 享元模式
享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...