結構型模式之享元模式

2021-08-14 21:26:12 字數 1146 閱讀 3409

享元模式

享元模式結構

- flyweight(抽象享元類):通常是乙個介面或抽象類,在抽象享元類中宣告了具體享元類公共的方法,這些方法可以向外界提供享元物件的內部資料(內部狀態),同時也可以通過這些方法設定外部資料(外部狀態)

- concreteflyweight(具體享元類):它實現了抽象享元類,其實例稱為享元物件;在具體享元類中為內部提供了儲存空間。通常,可以結合單例模式來設計具體享元類,為每乙個具體享元類提供唯一的享元物件。

- unsharedconcreteflyweight(非共享具體享元類):並不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設計為非共享具體享元類;當需要乙個非共享具體享元類的物件時可以直接通過例項化建立。

- flyweightfactory(享元工廠類):享元工廠類用於建立並管理享元物件,它針對抽享元類程式設計,將各種型別的具體享元物件儲存在乙個享元池中,享元池一般設計為乙個儲存「鍵值對」的集合(也可以是其他集合),可以結合工廠模式進行設計;當使用者請求乙個具體享元物件時,享元工廠提供乙個儲存在享元池中已建立的例項或者建立乙個新的例項(如果不存在的話),返回新建立的例項並將其儲存在享元池中。享元工廠的作用在於提供儲存享元物件的享元池。

class flyweightfactory  else 

}}class flyweight

//外部狀態在使用時由外部設定,不儲存在享元物件中,即使是同乙個物件

//在每一次呼叫時可以傳入不同的外部狀態

public

void

operation(string extrinsicstate)

}

思考,如果帶有外部狀態該怎麼處理?

單純享元模式和復合享元模式

總結

結構型模式之享元模式

在軟體系統中,有時候會存在資源浪費的情況,例如在計算機記憶體中儲存了多個完全相同或者非常相似的物件,如果這些物件的數量太多將導致系統執行代價過高,記憶體屬於計算機的 稀缺資源 不應該用來 隨便浪費 那麼是否存在一種技術可以用於節約記憶體使用空間,實現對這些相同或者相似物件的共享訪問呢?答案是肯定,這...

結構型模式之享元模式

定義 享元模式 flyweight pattern 運用共享技術有效地支援大量細粒度的物件。型別 結構型模式。適用情況 乙個應用程式有大量的物件。物件的大多數狀態都是外部的。如果刪除物件的外部狀態,可以和相對較少的共享物件取代很多組物件。應用程式不依賴物件的標識,即應用程式依賴於物件的抽象介面。概述...

結構型模式之享元模式

定義 享元模式 flyweight pattern 運用共享技術有效地支援大量細粒度的物件。型別 結構型模式。適用情況 乙個應用程式有大量的物件。物件的大多數狀態都是外部的。如果刪除物件的外部狀態,可以和相對較少的共享物件取代很多組物件。應用程式不依賴物件的標識,即應用程式依賴於物件的抽象介面。概述...