Flyweight(享元)--对象结构型模式
Flyweight(享元)–對象結構型模式
一、意圖
運行共享技術有效地支持大量細粒度的對象。
二、動機
1.在軟件系統(tǒng)采用純粹對象方案的問題在于大量細粒度的對象會很快充斥在系統(tǒng)中,從而帶來很高的運行時代價——主要指內存需求方面的代價。
2.如果在避免大量細粒度對象問題的同時,讓外部客戶程序仍然能夠透明地使用面向對象的方式來進行操作?
三、適用性
Flyweight模式的有效性很大程序上取決于如何使用它以及在何處處理它。
1.一個應用程序使用了大量的對象。
2.完全由于使用大量的對象,造成很大的存儲開銷。
3.對象的大多數(shù)狀態(tài)都可變?yōu)橥獠繝顟B(tài)。
4.如果刪除對象的外部狀態(tài),那么可以用相對較少的共享對象取代很多組對象。
5.應用程序不依賴于對象標識。由于Flyweight對象可以被共享,對于概念上明顯有別的對象,標識測試將返回真值。
四、結構
下面的對象圖說明了如果共享flyweight。
五、效果
使用Flyweight模式時,傳輸、查找和/或計算外部狀態(tài)都會產生運行時的開銷,尤其當flyweight原先被存儲為內部狀態(tài)時。然而,空間上的節(jié)省抵消了這些開銷。共享的flyweight越多,空間節(jié)省也就越大。
六、實現(xiàn)
1.刪除外部狀態(tài)。
2.管理共享對象。
七、要點總結
1.面向對象很好地解決了抽象的問題,但是作為一個運行在機器中的程序實體,我們需要考慮對象的代價問題。Flyweight主要解決面向對象的代價問題,一般不觸及面向對象的抽象性問題。
2.Flyweight采用對象共享的做法來降低系統(tǒng)中對象的個數(shù),從而降低細粒度對象給系統(tǒng)帶來的內存壓力。在具體實現(xiàn)方面,要主要對象狀態(tài)的處理。
3.對象的數(shù)量太大從而導致對象內存開銷加大——什么樣的數(shù)量才算大?這需要我們仔細的根據(jù)具體應用情況進行評估,而不能憑空臆斷。
八、相關模式
Flyweight模式通常和Component模式結合起來,用共享葉結點的有向無環(huán)圖實現(xiàn)一個邏輯上的層次結構。
通常,最好用Flyweight實現(xiàn)State和Strategy對象。
九、舉例說明
享元模式像一個對象緩沖池。
本文為李建忠設計模式視頻的筆記以及《設計模式-可復用面向對象的軟件的基礎》和自己的部分見解
總結
以上是生活随笔為你收集整理的Flyweight(享元)--对象结构型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Facade(外观)--对象结构型模式
- 下一篇: 吃藕粉减肥吗