裝飾者模式

2021-10-08 08:35:36 字數 1439 閱讀 3428

定義:動態地給乙個物件新增一些額外的職責,提供了比子類更加靈活的增強功能的方式。

​ 2、通過使用不同的具體裝飾者類及不同的組合順序,可以得到不同裝飾後具有不同行為或者狀態的物件。

​ 3、符合開閉原則。

缺點:1、增加了抽象裝飾者類和具體裝飾者類,一定程度增加了系統的複雜度,加大了系統的學習和理解成本。

​ 2、靈活性也意味著更容易出錯,對於多次被多次修飾的物件,除錯時尋找錯誤可能需要找到多個地方。

使用場景:

​ 1、在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。

​ 2、需要動態地給乙個物件增加功能,這些功能也可以動態地被撤銷,當不能採用繼承的方式對系統進行擴 充或者採用繼承不利於系統擴充套件和維護時。

定義乙個抽象物件

package com.sj.decoratorpattern;

public

inte***ce

greatmonkey

定義抽象物件的具體實現物件

package com.sj.decoratorpattern;

public

class

chinamonkey

implements

greatmonkey

}

定義抽象的裝飾物件實現抽象物件介面,構造方法有對被裝飾物件的引用

package com.sj.decoratorpattern;

public

abstract

class

decorator

implements

greatmonkey

@override

public

void

change()

}

建立具體的裝飾物件,繼承抽象裝飾的裝飾物件,在具體實現類中進行物件功能的拓展

package com.sj.decoratorpattern;

public

class

concretedecortor

extends

decorator

@override

public

void

change()

public

void

extra()

}

建立測試類進行測試

package com.sj.decoratorpattern;

public

class

consumer}/*

輸出結果:

有七十二種變化

**********===

有七十二種變化

並且還會飛

*/

裝飾者模式

裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...

裝飾者模式

裝飾者模式,是在不改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾者模式中的角色 1 被裝飾者抽象component,是乙個介面或抽象類,就是定義最核心的物件,也是最原始的物件,這個類是需要裝飾類的基類。2 被裝飾者具體實現co...

裝飾者模式

裝飾者模式 裝飾者模式的好處是便於擴充套件,對乙個東西不管怎麼變,只需要找到相應的元件去改變它 1.如何組裝在一起 建立主題 packetbodycreator body new packetbodycreator 建立header packethtmlheadercreator html new ...