享元模式核心
Flyweight (拳擊蠅量級) → 「享元」意指輕量級物件。以共享高效支援大量細粒度物件。
關鍵:區分兩種狀態
| 狀態類型 | 特性 | 儲存位置 |
| 內在狀態 | 物件內部固有、不隨環境變化 | 享元物件內部 (可共享) |
| 外在狀態 | 隨環境變化、不可共享 | 客戶端維護,使用時傳入 |
兩者相互獨立,外在狀態在建立後、使用時才傳入享元內部。
經典應用:文字編輯器
- 每個字母 = 一個享元物件,內在狀態 = 字元本身。
- 外在狀態 = 位置、字型、樣式。
- 文中所有 'a' 共用同一字母物件,僅位置/字型不同。
純享元結構 (UML)

四大角色
- Flyweight (抽象享元):定義公共介面,外在狀態以參數傳入。
- ConcreteFlyweight (具體享元):實作介面,儲存內在狀態 (與環境無關),可共享。
- FlyweightFactory (享元工廠):建立/管理享元,檢查現有實例重用或新建。
- Client (客戶端):維護享元引用,自行儲存外在狀態。
所有享元皆可共享,為最基礎形式。後續將介紹咖啡攤/咖啡廳實例與複合享元。