設計模式(Design Pattern) – Flyweight (享元模式)

目的

以共享機制有效的支援一大堆小規模物件


動機

Flyweight 的作法是探討如何在最細微的層次共享物件。也就是程式裡面,會有大大小小重複被使用的共用內容。

如果要產生 100 隻怪物,那數值、外觀等都必須被重複建立 100 次。所以數值跟外觀能不能變成共享的內容,只被建立 1 次。


結構

參與者

  • Flyweight : 宣告存取外在狀態的介面
  • ConcreteFlyweight : 具體實作出 Flyweight,其內容應該是可以共用的。
  • UnsharedConcreteFlyweight : 具體實作出的 Flyweight ,但內容是不共用的,也就是共用與不共用是根據使用者情況決定。
  • FlyweightFactory : 建立並管理 Flyweight 物件
  • Client : 使用者

範例

建立 ICreeper 作為古力怕的介面

分別弄出一般古力怕與特殊古力怕

建立 CreeperFactory : 當為一般古力怕時會回傳共享,如果是特殊古力怕則會創建一隻新的

Client 執行部分 :

執行結果 : 利用享元的方式,一般古力怕不需要重新建立,所以可以省下可觀的記憶體。

print

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *