裝飾器模式: 動态地給一個對象添加一些額外的職責或者行為。就增加功能來說, Decorator模式相比生成子類更為靈活。
裝飾器模式提供了改變子類的靈活方案。裝飾器模式在不必改變原類檔案和使用繼承的情況下,動态的擴充一個對象的功能。它是通過建立一個包裝對象,也就是裝飾來包裹真實的對象。
在裝飾模式中的角色有:
抽象構件(Component)角色:給出一個抽象接口,以規範準備接收附加責任的對象。
具體構件(ConcreteComponent)角色:定義一個将要接收附加責任的類。
裝飾(Decorator)角色:持有一個構件(Component)對象的執行個體,并定義一個與抽象構件接口一緻的接口。
具體裝飾(ConcreteDecorator)角色:負責給構件對象“貼上”附加的責任。

(1) 裝飾對象和真實對象有相同的接口。這樣用戶端對象就可以以和真實對象相同的方式和裝飾對象互動。
(2) 裝飾對象包含一個真實對象的索引(reference)
(3) 裝飾對象接受所有的來自用戶端的請求。它把這些請求轉發給真實的對象。
(4) 裝飾對象可以在轉發這些請求以前或以後增加一些附加功能。這樣就確定了在運作時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實作對給定類的功能擴充。
1)Adapter 模式:Decorator模式不同于Adapter模式,因為裝飾僅改變對象的職責而不改變它的接口(IO是半透明的,有些裝飾者增加了接口沒有的方法);而擴充卡将給對象一個全新的接口。
2)Composite組合模式:可以将裝飾視為一個退化的、僅有一個元件的組合。然而,裝飾僅給對象添加一些額外的職責—它的目的不在于對象聚集。
3)Strategy政策模式:用一個裝飾你可以改變對象的外表;而Strategy模式使得你可以改變對象的核心。這是改變對象的兩種途徑。