您好,登錄后才能下訂單哦!
一、什么是裝飾器模式
裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。
這種模式創(chuàng)建了一個(gè)裝飾類,用來(lái)包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。
在不想增加更多子類的情況下擴(kuò)展類,動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加功能來(lái)說(shuō),裝飾器模式相比生成子類更為靈活。
二、裝飾器模式的具體實(shí)現(xiàn)
1、結(jié)構(gòu)圖
2、分析
裝飾器模式由組件和裝飾者組成。
3、java 代碼實(shí)現(xiàn):
抽象組件:
package com.designpattern.decoratorPattern; /** * Component 組件 抽象角色 * @author zhongtao on 2018/10/23 */ public interface House { /** * 裝飾風(fēng)格 */ void style(); }
具體組件:
/** * 具體組件 * @author zhongtao on 2018/10/23 */ public class ChineseStyle implements House { @Override public void style() { System.out.println("中式風(fēng)格裝修"); } } /** * 具體組件 * @author zhongtao on 2018/10/23 */ public class EuropeanStyle implements House { @Override public void style() { System.out.println("歐式風(fēng)格裝修"); } }
抽象裝飾類:
package com.designpattern.decoratorPattern; /** * 抽象裝飾類 * * @author zhongtao on 2018/10/23 */ public class HouseDecorator implements House { public House house; public HouseDecorator(House house) { this.house = house; } @Override public void style() { house.style(); } }
具體裝飾類:
package com.designpattern.decoratorPattern; /** * 具體裝飾類 * * @author zhongtao on 2018/10/23 */ public class RedDecorator extends HouseDecorator { public RedDecorator(House house) { super(house); } public void style() { this.house.style(); System.out.println("紅色裝飾墻"); } }
測(cè)試裝飾器模式:
package com.designpattern.decoratorPattern; import org.junit.Test; /** * 測(cè)試裝飾器模型 * * @author zhongtao on 2018/10/22 */ public class DecoratorPatternTest { /** * 測(cè)試裝飾器模型 */ @Test public void testDecoratorPattern(){ ChineseStyle chineseStyle = new ChineseStyle(); House redChineseStyle = new RedDecorator(new ChineseStyle()); House redEuropeanStyle = new RedDecorator(new EuropeanStyle()); System.out.println("中式裝修"); chineseStyle.style(); System.out.println("\n中式加紅色墻"); redChineseStyle.style(); System.out.println("\n歐式加紅色墻"); redEuropeanStyle.style(); } }
測(cè)試結(jié)果:
---中式裝修---
中式風(fēng)格裝修
---中式加紅色墻---
中式風(fēng)格裝修
紅色裝飾墻
---歐式加紅色墻---
歐式風(fēng)格裝修
紅色裝飾墻
三、裝飾器的優(yōu)缺點(diǎn)
1、優(yōu)點(diǎn)
2、缺點(diǎn)
多層裝飾比較復(fù)雜。
源碼地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。