設計模式學習總結 8 裝飾模式

2022-09-23 16:03:09 字數 573 閱讀 3772

8.裝飾模式

意圖:動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。

主要解決:一般的,我們為了擴充套件乙個類經常使用繼承方式實現,由於繼承為類引入靜態特徵,並且隨著擴充套件功能的增多,子類會很膨脹

什麼時候使用:在不想增加很多子類的情況下擴充套件類

如何解決:將具體功能職責劃分,同時繼承裝飾者模式

結構圖:

關鍵**:1.component類充當抽象角色,不應該具體實現2 修飾類引用和繼承component類,具體擴充套件類重寫父類方法

應用例項:1.孫悟空有72變,當他變成「廟宇」後,他的根本還是乙隻猴子,但是他又有了廟宇的功能 2.不論一幅畫有沒有畫框都可以掛在牆上,但是通常都是有畫框的,並且實際上是畫框被掛在牆上。在掛在牆上之前,畫可以被蒙上玻璃,裝到框子裡;這時畫、玻璃和畫框形成了乙個物體。

優點:1. 裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的乙個替代模式,裝飾模式可以動態擴充套件乙個實現類的功能

缺點:多層裝飾比較複雜

使用場景:1. 擴充套件乙個類的功能 2.動態增加功能,動態撤銷

注意事項:可代替繼承

設計模式學習總結 裝飾模式

抽象構件角色 component 給出乙個抽象介面,以規範準備接收附加責任的物件。具體構件角色 concrete component 定義乙個將要接收附加責任的類。裝飾角色 decorator 持有乙個構件 component 物件的引用,並定義乙個與抽象構件介面一致的介面。具體裝飾角色 concr...

設計模式總結 裝飾模式

當需要在主類中加入新的字段,方法或邏輯,而它們只是在某種特定情況下才會用到時,可以使用這個模式。該模式可以把核心職責與裝飾功能區分開,對 增加功能 來說比較靈活。舉個栗子,需要在玩家類當中新增 穿戴襪子 穿戴鞋子 的功能 1.建立 player類,並定義 show 方法。2.定義服飾類 finery...

設計模式學習 裝飾模式

看完了幾個原則後,我又開始看裝飾模式,將一些裝飾用的方法從主類中分離,並且將具體的裝飾步驟隔離開了,使得主類更加的簡便。這樣做的最大好處就是,有效的把類的核心職責和裝飾功能區分開了,而且可以去除相關類中重複的裝飾邏輯。include include using namespace std class...