裝飾者模式

一、對應的設計原則:類應該對擴展開放,對修改關閉。設計

二、裝飾者模式:動態地將責任附加到對象上。想要擴展功能,裝飾者提供有別於繼承的另外一種選擇。(我的理解:動態的用一個或者多個裝飾者裝飾對象,且對象與裝飾者來源於同一個超類)對象

三、類圖以下:繼承

說明:擴展

裝飾者和被裝飾對象有相同的超類型。程序

能夠用一個或者多個裝飾者包裝一個對象。im

裝飾者能夠在被裝飾者的行爲以前或以後,加上本身的行爲,以達到特定的目的。img

對象能夠在任什麼時候候被裝飾,即在運行時動態地、不限量地用裝飾者來裝飾對象。設計師

 四、例子主題

以咖啡爲例,咱們以飲料爲主題,而後在運行時以調料來裝飾飲料。系統

4.1 類圖以下:

4.2 代碼實現:暫時省略

五、JAVA API中的裝飾者模式

 

六、優勢

(1)裝飾模式與繼承關係的目的都是要擴展對象的功能,可是裝飾模式能夠提供比繼承更多的靈活性。裝飾模式容許系統動態決定「貼上」一個須要的「裝飾」,或者除          掉一個不須要的「裝飾」。繼承關係則不一樣,繼承關係是靜態的,它在系統運行前就決定了。

(2)經過使用不一樣的具體裝飾類以及這些裝飾類的排列組合,設計師能夠創造出不少不一樣行爲的組合。

我的理解:動態擴展對象功能,經過不一樣的裝飾類組合建立不一樣的對象,減小了繼承帶來的類爆炸。

七、缺點

裝飾者會致使設計中出現許多小對象,若是過分使用,會讓程序變得很複雜

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息