1.裝飾模式(Decorator):
裝飾模式(Decorator)也叫包裝器模式(Wrapper)。GOF在《設計模式》一書中給出的定義為:動態地給一個對象添加一些額外的職責。就增加功能來說,Decorator模式相比生成子類更為靈活。
裝飾模式的組成:
1) 抽象構件角色(Component):定義一個抽象接口,以規范準備接收附加責任的對象。
2) 具體構件角色(Concrete Component):這是被裝飾者,定義一個將要被裝飾增加功能的類。
3) 裝飾角色(Decorator):持有一個構件對象的實例,并定義了抽象構件定義的接口。
4) 具體裝飾角色(Concrete Decorator):負責給構件添加增加的功能。
JAVA中IO流的設計就大量運用了裝飾模式。看看我們熟悉的代碼:
裝飾模式的特點;
(1) 裝飾對象和真實對象有相同的接口。這樣客戶端對象就可以以和真實對象相同的方式和裝飾對象交互。
(2) 裝飾對象包含一個真實對象的索引(reference)
(3) 裝飾對象接受所有的來自客戶端的請求。它把這些請求轉發給真實的對象。
(4) 裝飾對象可以在轉發這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼續來實現對給定類的功能擴展。
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("..")));
層層包裝,增強功能。這就是裝飾模式的要旨。

