天天看點

裝飾模式

•裝飾模式又名包裝(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,如需轉載請自行聯系原作者