裝飾模式的角色:
- 抽象構件角色(Component)
給出一個抽象接口, 以規範準備接收附加職責的對象.
- 具體構件角色(Concrete Component)
定義一個將要接收附加職責的類.
- 裝飾角色(Decorator)
持有一個構件(Component)對象的引用, 並定義一個與抽象構件接口一致的接口.
- 具體裝飾角色(Concrete Decorator)
負責給構件對象”貼上”附加的職責.
裝飾模式的特點:
- 裝飾對象和真實對象有相同的接口.
- 裝飾對象包含一個真實對象的引用(Reference).
- 裝飾對象接收所有來自客戶端的請求.
- 裝飾對象可以在轉發這些請求以前或以後增加一些附加功能
裝飾模式 VS 繼承
裝飾模式
繼承
用來擴展特定對象的功能
用來擴展一類對象的功能
不需要子類
需要子類
動態
靜態
運行時分配職責
編譯時分配職責
防止由於子類導致的複雜和混亂
導致很多子類產生
更多的靈活性
缺乏靈活性
對於一個給定的對象,同時可能有不同的裝飾對象,客戶端可以通過它的需求選擇合適的裝飾對象發送消息.
Jan 14th, 2016