裝飾模式,屬於『結構型模式』。
目的
動態的給一個類別順序添加額外的職責,就增加功能來說比生成子類更為靈活。
角色
- 抽象零件(Component):為具體零件的父類別。
- 具體零件(ConcreteComponent):繼承抽象零件
- 抽象裝飾(Decorator):繼承抽象零件,擴展抽象零件功能
- 具體裝飾(ConcreteDecorator):具體添加功能給component
優點
- 將裝飾功能搬出類別,可簡化原類別。
- 可以去除相關類中重複的裝飾邏輯
缺點
- 裝飾要考慮順序性,例如:穿衣,要先穿內衣,再穿TShirt。
- 裝飾如果多的話,要寫很多子類。
UML
實際範例:人穿衣
- 具體零件:使用虛擬方法,也可不用抽象零件,帶入名字
1 |
|
- 抽象裝飾:要有個裝飾方法
1 |
|
- 具體裝飾:覆寫Show,需包含base
1 |
|
- 使用方式
1 |
|