當需要在主類中加入新的字段,方法或邏輯,而它們只是在某種特定情況下才會用到時,可以使用這個模式。
該模式可以把核心職責與裝飾功能區分開,對「增加功能」來說比較靈活。
舉個栗子,需要在玩家類當中新增「穿戴襪子」,「穿戴鞋子」的功能:
1.建立 player類,並定義 show 方法。
2.定義服飾類 finery ,該類繼承 player。由於襪子和鞋子存在穿戴順序的問題,即需要先穿戴襪子再穿戴鞋子,因此需在本次穿戴前,穿戴它的上級裝飾。
2.1維護乙個 player 型別的變數 player;
2.2建立設定 player 的方法 decorate;
2.3覆寫 show 方法,並在實現具體方法之前先呼叫 player 的 show 方法;
3.建立具體服飾類 shoes , socks,繼承服飾類 finery。
4.呼叫過程:
player p = new player();
shoes shoes = new shoes();
socks socks = new socks();
socks.decorate(p);
shoes.decorate(socks);
shoes.show();
ps:該模式需要注意呼叫順序。 設計模式學習總結 裝飾模式
抽象構件角色 component 給出乙個抽象介面,以規範準備接收附加責任的物件。具體構件角色 concrete component 定義乙個將要接收附加責任的類。裝飾角色 decorator 持有乙個構件 component 物件的引用,並定義乙個與抽象構件介面一致的介面。具體裝飾角色 concr...
大話設計模式 裝飾者模式(總結)
1 裝飾者模式的一般應用場景 當系統增加新的功能,需要給類增加新的功能,而這些新的功能又主要是為了修飾原來類中的核心職責或者功能,也就是說,這些新的功能是用來修飾的,而且這些用來修飾的功能是在滿足某乙個特定情境下才會有需要執行的,這個時候就需要用到 裝飾者模式。2 裝飾者模式的構成 1 抽象構件 c...
設計模式學習總結 8 裝飾模式
8.裝飾模式 意圖 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。主要解決 一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹 什麼時候使用 在不想增加很多子類的情況下擴充套件類 如...