程式碼執行結果

代碼角色說明
- Weapon:Component(抽象構件)
- Rifle:ConcreteComponent(具體構件)
- Decorator:Decorator(抽象裝飾),繼承 Component + 持有 Component 實例
- Enhance / Wear:ConcreteDecorator(具體裝飾),附加強化/磨損職責
半透明裝飾模式
Client 使用具體裝飾類別(而非抽象 Component),因需呼叫額外方法(EnhanceAmmo()、WearByRate())。此為「半透明裝飾」。
採用時機
- 代碼層面:功能交叉擴展不會導致類別爆炸/繼承層次過深
- 應用層面:動態賦予/撤銷職責,任意排列組合
裝飾模式 vs 繼承
| 維度 | 繼承 | 裝飾模式 |
| 靈活度 | 靜態、編譯期決定 | 動態、執行期組合 |
| 組合數 | 指數級增長(強化+磨損+修理...) | 線性組合,任意排列 |
| 單一職責 | 違反(子類混合多職責) | 符合(每裝飾類別單一職責) |
| 開閉原則 | 違反(新增功能需修改/新增子類) | 符合(新增裝飾類別,不修改既有) |
適用性檢核
- 需要在不影響其他物件的情況下,動態給單一物件增加職責
- 職責可撤銷
- 無法採用繼承(如類別密封、或會產生大量子類)