享元模式 Flyweight

2021-05-24 01:59:26 字數 943 閱讀 8146

享元模式運用共享技術有效地支援大量細粒度的物件。

uml圖如下:

c++**實現如下:

思考:flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?

答:實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。

思考:為什麼要有unsharedconcreteflyweight的存在呢?

答:因為儘管我們大部分時間都需要共享物件來降低記憶體的消耗,但個別時候也有可能不需要共享的,那麼此時的unsharedconcreteflyweight子類就有存在的必要了,它可以解決那些不需要共享物件的問題。

*內部狀態和外部狀態

在享元物件內部並且不會隨環境改變而改變的共享部分,可以稱為是享元物件的內部狀態;而隨著環境變化而變化的不可共享的狀態就是說外部狀態了。事實上,享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果能發現這些例項除了幾個引數外基本上都是相同的,有時就能夠大幅度地減小需要例項化的類的數量。如果能把那些引數移到類例項的外面,在方法呼叫時將它們傳遞過來,就可以通過共享大幅度地減少單個例項的數目。也就是說,享元模式flyweight執行時所需的狀態是有內部的也有可能有外部狀態的,內部狀態儲存在concreteflyweight中,而物件的外部狀態考慮有客戶端物件儲存或計算,當呼叫flyweight物件的操作時,將該狀態傳遞給它。

享元模式的應用

*什麼時候使用享元模式?

答:如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時就應該考慮使用;還有就是物件的大多數狀態可以是外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時可以考慮使用享元模式。

FlyWeight 享元模式

include include include using namespace std class flyweight virtual flyweight m vector.clear class flyweightfactorya public flyweightfactory flyweight...

享元模式 flyweight

flyweight是輕量級的意思,中文這邊翻譯成享元,更容易讓人理解一些。享元模式是為了應對大量細粒度物件重複的問題。程式中存在大量細粒度的物件,每次要使用時都必須建立乙個新的物件,既影響了執行效率又增加了記憶體消耗。於是有了享元模式,享元模式提取出這些細粒度物件中間公共的狀態 屬性,我的理解 只生...

flyweight 享元模式

運用共享技術有效地支援大量細粒度的物件。當以下情況都成立時可以使用享元模式 描述乙個介面,通過這個介面flyweight可以接受並作用於外部狀態。實現flyweight介面,並為內部狀態 如果有的話 增加儲存空間。並非所有的flyweight子類都需要被共享。flyweight介面使共享成為可能,但...