設計模式之享元模式學習筆記

2021-09-19 03:42:10 字數 1554 閱讀 7387

享元模式是池技術(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 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...