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