•裝飾模式又名包裝(Wrapper)模式
•裝飾模式以對用戶端透明的方式擴充對象的功能,是繼承關系的一個替代方案
•裝飾模式以對客戶透明的方式動态的給一個對象附加上更多的責任。換言之,用戶端并不會覺得對象在裝飾前和裝飾後有什麼不同。
•裝飾模式可以在不創造更多子類的情況下,将對象的功能加以擴充。
•裝飾模式把用戶端的調用委派到被裝飾類。裝飾模式的關鍵在于這種擴充完全是透明的。
•裝飾模式是在不必改變原類檔案和使用繼承的情況下,動态的擴充一個對象的功能。它是通過建立一個包裝對象,也就是裝飾來包裹真實的對象。
•裝飾模式的角色:
–抽象構件角色(Component):給出一個抽象接口,以規範準備接收附加責任的對象。
–具體構件角色(Concrete Component):定義一個将要接收附加責任的類。
–裝飾角色(Decorator):持有一個構件(Component)對象的引用,并定義一個與抽象構件接口一緻的接口
–具體裝飾角色(Concrete Decorator):負責給構件對象“貼上”附加的責任。
•裝飾模式的特點:
–裝飾對象和真實對象有相同的接口。這樣用戶端對象就可以以和真實對象相同的方式和裝飾對象互動。
–裝飾對象包含一個真實對象的引用(reference)
–裝飾對象接收所有來自用戶端的請求。它把這些請求轉發給真實的對象。
–裝飾對象可以在轉發這些請求以前或以後增加一些附加功能。這樣就確定了在運作時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實作對給定類的功能擴充。
•裝飾模式
–用來擴充特定對象的功能
–不需要子類
–動态
–運作時配置設定職責
–防止由于子類而導緻的複雜和混亂
–更多的靈活性
–對于一個給定的對象,同時可能有不同的裝飾對象,用戶端可以通過它的需要選擇合适的裝飾對象發送消息。
•繼承
–用來擴充一類對象的功能
–需要子類
–靜态
–編譯時分派職責
–導緻很多子類産生
–缺乏靈活性
Component.java
ConcreteComponent.java


Decorator.java


ConcreteDecorator1.java


ConcreteDecorator2.java


Client.java


本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/4005296.html,如需轉載請自行聯系原作者