23種設計模式之裝飾模式

2022-05-10 23:40:01 字數 1589 閱讀 8713

定義: 動態的給乙個物件新增一些額外的職責. 就增加功能來說, 裝飾模式相比生成子類更為靈活.

通俗的說, 就是對乙個類或方法進行包裝

裝飾模式的通用類圖:

類圖中的四個角色說明如下:

component 抽象構件: component是乙個介面或抽象類, 就是定義我們最核心的角色, 也就是最原始的物件. 在裝飾模式中, 必然有乙個最基本、最核心的介面或抽象類充當 component 抽象構件

concretecomponent 具體構件: concretecomponent 是最核心、最原始、最基本的介面或抽象類的實現, 要裝飾的就是它

decorator 裝飾角色: 一般是乙個抽象類, 實現介面或抽象方法, 它裡面不一定有抽象的方法, 在它的屬性中必然有乙個private變數指向component抽象構件

具體裝飾類: concreatedecrator是具體的裝飾類, 要把最核心的、最原始的、最基本的東西裝飾成其他東西. 當只有乙個裝飾類時, 可以沒有抽象裝飾角色

具體實現**如下:

抽象裝飾者**:

具體裝飾者**:

場景類:

裝飾模式的優點:

裝飾類和被裝飾類可以獨立發展, 而不會相互耦合. 也就是說, component 類無需知道 decorator 類, decorator 類是從外部來擴充套件 component類的功能, 而decorator也不用知道具體的構件

裝飾模式是繼承關係的乙個替代方案. 我們看裝飾類 decorator, 不管裝飾多少層, 返回的物件還是 component.

裝飾模式可以動態的擴充套件乙個實現類的功能

裝飾模式的缺點:

對於裝飾模式記住一點就夠了: 多層的裝飾是比較複雜的.

裝飾模式的應用場景:

需要擴充套件乙個類的功能, 或給乙個類增加附加功能

需要動態的給乙個物件增加功能, 這些功能可以再動態的撤銷

需要為一批的兄弟類進行改裝或加裝功能, 當然首選裝飾模式

裝飾模式是對繼承的有力補充. 要知道繼承不是萬能的, 在專案中要考慮諸如易維護、易擴充套件、易復用等, 而且在一些情況下要是用繼承就會增加很多子類, 而且靈活性非常差, 當然維護也不容易了, 也就是說裝飾模式可以替代繼承, 解決類膨脹的問題. 同時, 繼承是靜態的給類增加功能, 而裝飾模式是動態的增加功能.

裝飾模式還有乙個非常好的優點: 擴充套件性非常好.

23種設計模式之裝飾模式

職責 動態的為乙個物件增加乙個新的功能 裝飾模式是乙個用於代替繼承的技術,無須通過繼承增加子類就能擴充套件物件的新功能,使用物件的關聯關係代替繼承關係,更加靈活,同時避免型別體系的快速膨脹。component抽象控制項元件 concretecomponent具體構件角色 真實物件 decorator...

23種設計模式之裝飾者模式

今天我來向大家講解一下裝飾者模式,裝飾者模式的設計原則同樣也是對擴充套件開放,對修改關閉,那我們就有了乙個問題,如何做到對修改關閉,對擴充套件開放呢?我們都知道,裝飾者模式的定義是動態地將責任附加到物件中,其實裝飾者模式也可以說是動態巢狀的乙個過程。就比如舉例來說,假如我現在到乙個商店中買了一杯牛奶...

23種設計模式之裝飾模式(Decorator)

裝飾模式是一種物件結構型模式,可動態地給乙個物件增加一些額外的職責,就增加物件功能來說,裝飾模式比生成子類實現更為靈活。通過裝飾模式,可以在不影響其他物件的情況下,以動態 透明的方式給單個物件新增職責 當需要動態地給乙個物件增加功能,這些功能可以再動態地被撤銷時可使用裝飾模式 當不能採用生成子類的方...