裝飾者模式(Decorator Pattern),是在不必改變原類文件和使用繼承的情況下,動態的擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。
使用裝飾者模式的時候需要注意一下幾點內容:
(1)裝飾對象和真實對象有相同的接口。這樣客戶端對象就可以以和真實對象相同的方式和裝飾對象交互。
(2)裝飾對象包含一個真實對象的引用。
(3)裝飾對象接受所有的來自客戶端的請求,它把這些請求轉發給真實的對象。
(4)裝飾對象可以在轉發這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現對給定類的功能擴展。然而,裝飾者模式,不需要子類可以在應用程序運行時,動態擴展功能,更加方便、靈活。
適用裝飾者模式場合:
1.當我們需要為某個現有的對象,動態的增加一個新的功能或職責時,可以考慮使用裝飾模式。
2.當某個對象的職責經常發生變化或者經常需要動態的增加職責,避免為了適應這樣的變化,而增加繼承子類擴展的方式,因為這種方式會造成子類膨脹的速度過快,難以控制。
推薦你一本設計模式方面的優秀書籍:鄭阿奇 主編的《軟件秘笈-設計模式那點事》。里面講解很到位,實例通俗易懂,看了收獲很大!