目的
以共享機制有效的支援一大堆小規模物件
動機
Flyweight 的作法是探討如何在最細微的層次共享物件。也就是程式裡面,會有大大小小重複被使用的共用內容。
如果要產生 100 隻怪物,那數值、外觀等都必須被重複建立 100 次。所以數值跟外觀能不能變成共享的內容,只被建立 1 次。
結構
參與者
- Flyweight : 宣告存取外在狀態的介面
- ConcreteFlyweight : 具體實作出 Flyweight,其內容應該是可以共用的。
- UnsharedConcreteFlyweight : 具體實作出的 Flyweight ,但內容是不共用的,也就是共用與不共用是根據使用者情況決定。
- FlyweightFactory : 建立並管理 Flyweight 物件
- Client : 使用者
範例
建立 ICreeper 作為古力怕的介面
分別弄出一般古力怕與特殊古力怕
建立 CreeperFactory : 當為一般古力怕時會回傳共享,如果是特殊古力怕則會創建一隻新的
Client 執行部分 :
執行結果 : 利用享元的方式,一般古力怕不需要重新建立,所以可以省下可觀的記憶體。