模式定義:
裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能欲账,同時(shí)又不改變其結(jié)構(gòu)粥鞋。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式襟沮,它是作為現(xiàn)有的類的一個(gè)包裝抵皱。
這種模式創(chuàng)建了一個(gè)裝飾類妥箕,用來(lái)包裝原有的類赊堪,并在保持類方法簽名完整性的前提下髓废,提供了額外的功能冬骚。
動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)世囊。就增加功能來(lái)說(shuō)别瞭,裝飾器模式相比生成子類更為靈活。
一般的株憾,我們?yōu)榱藬U(kuò)展一個(gè)類經(jīng)常使用繼承方式實(shí)現(xiàn)蝙寨,由于繼承為類引入靜態(tài)特征,并且隨著擴(kuò)展功能的增多嗤瞎,子類會(huì)很膨脹墙歪。
在不想增加很多子類的情況下擴(kuò)展類。
將具體功能職責(zé)劃分贝奇,同時(shí)繼承裝飾者模式虹菲。
1、Component 類充當(dāng)抽象角色掉瞳,不應(yīng)該具體實(shí)現(xiàn)毕源。
2、修飾類引用和繼承 Component 類陕习,具體擴(kuò)展類重寫父類方法霎褐。
實(shí)現(xiàn)
我們將創(chuàng)建一個(gè) Shape 接口和實(shí)現(xiàn)了 Shape 接口的實(shí)體類。然后我們創(chuàng)建一個(gè)實(shí)現(xiàn)了 Shape 接口的抽象裝飾類 ShapeDecorator该镣,并把 Shape 對(duì)象作為它的實(shí)例變量冻璃。
RedShapeDecorator 是實(shí)現(xiàn)了 ShapeDecorator 的實(shí)體類。
DecoratorPatternDemo损合,我們的演示類使用 RedShapeDecorator 來(lái)裝飾 Shape 對(duì)象省艳。
總結(jié):
裝飾類和被裝飾類可以獨(dú)立發(fā)展,不會(huì)相互耦合嫁审,裝飾模式是繼承的一個(gè)替代模式拍埠,裝飾模式可以動(dòng)態(tài)擴(kuò)展一個(gè)實(shí)現(xiàn)類的功能。
多層裝飾比較復(fù)雜土居。
1枣购、擴(kuò)展一個(gè)類的功能。
2擦耀、動(dòng)態(tài)增加功能棉圈,動(dòng)態(tài)撤銷。
可代替繼承眷蜓。
參考:菜鳥(niǎo)教程