設計模式學習之十 享元模式

2021-10-19 08:14:50 字數 796 閱讀 4069

flyweight pattern 蠅量模式 運用共享技術有效地支援大量細粒度得物件

常用於系統底層開發,解決系統得效能問題,例如 資料庫連線池,裡面都是建立好得連線物件,在這些連線物件有我們需要得則直接拿過來用,避免重複建立

享元模式能夠解決重複物件得記憶體浪費得問題,當系統中有大量相似物件,需要緩衝池時,不需要總是建立物件,可以從緩衝池裡面拿。

享元模式經典應用場景池技術。string常量池,資料庫連線池,緩衝池。

有客戶要求以新聞得形式發布

有客戶要求以部落格得形式發布

flyweight 是乙個抽象享元角色,它是產品抽象類,同時定義出外部狀態和內部狀態。

concerteflyweight是具體得享元角色,是具體得產品類,實現抽象角色定義相關業務

unsharedconcreflyweight 是不可共享得角色,

flyweightfactory 享元工廠類,用於構建乙個池容器,同時從這個池中獲取物件得方法

比如圍棋,五子棋,跳棋,它們都有大量得棋子物件,圍棋和五子棋只有黑白兩色,跳棋顏色多一點,所以棋子顏色就是棋子的內部狀態;而各個棋子之間的差別就是位置不同,當我們落子時,棋子顏色固定,位置是變化的,所以座標是棋子的外部狀態

享元模式兩個要求:細粒度和共享物件。分清內部狀態和外部狀態

內部狀態指的是物件共享出來的資訊,儲存在享元物件內部且不會隨環境的改變而改變

外部是值物件依賴的乙個標記,是隨著環境變化而改變的。不可共享的狀態

設計模式學習(十)享元模式

工廠類,返回乙個 如果沒有就建立乙個,並放到池中 public class websitefactory return website map.get type 獲取 分類的總數 池中有多少個 型別 public intgetwebsitecount 抽象方法 public abstract cla...

設計模式之十 FlyWeight 享元

問題 我們想對所有動物進行管理,每種動物對應乙個類,他們都是繼承自animal 如果我們對每乙個動物都生成乙個例項,那麼這數量是非常龐大了,我們需要想乙個比較不錯的方法 解決方案 我們可以為每一類動物建立乙個物件,讓這個物件持有這類動物的固定屬性,對於需要變化的因素,我們可以通過引數傳進來,進行處理...

python設計模式(十) 享元模式

元,可理解為python中的元類 最小粒度的類,系統中存在大量的相似物件時,可以選擇享元模式提高資源利用率。coding utf 8 class flyweightbase defoffer self 享元基類 pass class flyweight flyweightbase 共享享元類 def...