目的
將額外權責動態附加於物件身上,不必衍生子類別即可彈性擴充。如為 TextBox 添加 ScrollBar
動機
如果想將額外權責附加到個別物件上面,可以使用繼承,但這作法彈性不夠。
Decorator 的作法是在元件外面包覆上有該能力的物件。這做法的另一個優點就是通透性,所以就像裝備一樣,可以無限的包覆下去。
結構
參與者
- Component : 可以被 Decorator 動態添加權責的物件之介面
- ConcreteComponent : 可以被 Decorator 動態添加權責的物件
- Decorator : 裝飾者介面
- ConcreteDecoreator : 可將權責添加到 Component 身上
範例
建立 Component ,提供共用的基本數值
建立可以被共用的基本角色數值
可以被添加的裝飾者
實際產生怪物