享元(flyweight)模式的定義:運用共享技術來有效地支援大量細粒度物件的復用。它通過共享已經存在的物件來大幅度減少需要建立的物件數量、避免大量相似類的開銷,從而提高系統資源的利用率。1.結構需求:
1.抽象享元角色(flyweight):是所有的具體享元類的基類,為具體享元規範需要實現的公共介面,非享元的外部狀態以引數的形式通過方法傳入。2.非享元角色類:2.具體享元(concrete flyweight)角色:實現抽象享元角色中所規定的介面。
3.非享元(unsharable flyweight)角色:是不可以共享的外部狀態,它以引數的形式注入具體享元的相關方法中。
4.享元工廠(flyweight factory)角色:負責建立和管理享元角色。當客戶物件請求乙個享元物件時,享元工廠檢查系統中是否存在符合要求的享元物件,如果存在則提供給客戶;如果不存在的話,則建立乙個新的享元物件。
class
unsharedconcreteflyweight
public string getinfo()
public
void
setinfo
(string info)
}
3.抽象享元角色類inte***ce
flyweight
4.具體享元角色類class
concreteflyweight
implements
flyweight
public
void
operation
(unsharedconcreteflyweight outstate)
}
5.享元工廠角色類class
flyweightfactory
else
return flyweight;
}}
6.測試public
class
flyweightpattern
}
7.結果具體享元a被建立!
具體享元a已經存在,被成功獲取!
具體享元a已經存在,被成功獲取!
具體享元b被建立!
具體享元b已經存在,被成功獲取!
具體享元a被呼叫,非享元資訊是:第1次呼叫a。
具體享元a被呼叫,非享元資訊是:第2次呼叫a。
具體享元a被呼叫,非享元資訊是:第3次呼叫a。
具體享元b被呼叫,非享元資訊是:第1次呼叫b。
具體享元b被呼叫,非享元資訊是:第2次呼叫b。
1.應用:五子棋遊戲2.優點:1.系統中存在大量相同或相似的物件,這些物件耗費大量的記憶體資源。
2.大部分的物件可以按照內部狀態進行分組,且可將不同部分外部化,這樣每乙個組只需儲存乙個內部狀態。
3.由於享元模式需要額外維護乙個儲存享元的資料結構,所以應當在有足夠多的享元例項時才值得使用享元模式。
相同物件只要儲存乙份,這降低了系統中物件的數量,從而降低了系統中細粒度物件給記憶體帶來的壓力。3.缺點:
1.為了使物件可以共享,需要將一些不能共享的狀態外部化,這將增加程式的複雜性。2.讀取享元模式的外部狀態會使得執行時間稍微變長。
23種設計模式 19 享元模式
目錄 一享元模式簡介brief introduction 二解決的問題what to solve 三享元模式分析analysis 享元模式結構 例項執行結果 四享元模式例項分析example 場景 例項執行結果 五總結summary 原文 享元模式 flyweight pattern 運用共享技術有...
23種設計模式之 12 享元模式(共享池)
練習原始碼 參考內容 簡說設計模式 享元模式 23種設計模式全解析 享元模式的主要目的是實現物件的共享,即共享池,當系統中物件多的時候可以減少記憶體的開銷,通常與工廠模式一起使用。flyweightfactory負責建立和管理享元單元,當乙個客戶端請求時,工廠需要檢查當前物件池中是否有符合條件的物件...
設計模式(享元模式)
享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...