一、對應的設計原則:類應該對擴展開放,對修改關閉。設計
二、裝飾者模式:動態地將責任附加到對象上。想要擴展功能,裝飾者提供有別於繼承的另外一種選擇。(我的理解:動態的用一個或者多個裝飾者裝飾對象,且對象與裝飾者來源於同一個超類)對象
三、類圖以下:繼承
說明:擴展
裝飾者和被裝飾對象有相同的超類型。程序
能夠用一個或者多個裝飾者包裝一個對象。im
裝飾者能夠在被裝飾者的行爲以前或以後,加上本身的行爲,以達到特定的目的。img
對象能夠在任什麼時候候被裝飾,即在運行時動態地、不限量地用裝飾者來裝飾對象。設計師
四、例子主題
以咖啡爲例,咱們以飲料爲主題,而後在運行時以調料來裝飾飲料。系統
4.1 類圖以下:
4.2 代碼實現:暫時省略
五、JAVA API中的裝飾者模式
六、優勢
(1)裝飾模式與繼承關係的目的都是要擴展對象的功能,可是裝飾模式能夠提供比繼承更多的靈活性。裝飾模式容許系統動態決定「貼上」一個須要的「裝飾」,或者除 掉一個不須要的「裝飾」。繼承關係則不一樣,繼承關係是靜態的,它在系統運行前就決定了。
(2)經過使用不一樣的具體裝飾類以及這些裝飾類的排列組合,設計師能夠創造出不少不一樣行爲的組合。
我的理解:動態擴展對象功能,經過不一樣的裝飾類組合建立不一樣的對象,減小了繼承帶來的類爆炸。
七、缺點
裝飾者會致使設計中出現許多小對象,若是過分使用,會讓程序變得很複雜