設(shè)計(jì)模式(1)——裝飾器模式

裝飾器模式

可以理解為在不改變?cè)谐绦虻那疤嵯拢蛞粋€(gè)現(xiàn)有的對(duì)象添加新的修飾(功能)。
例如:原有程序?qū)崿F(xiàn)的功能為“李青學(xué)習(xí)技能”,這時(shí)新的業(yè)務(wù)要求顯示學(xué)習(xí)的具體技能,那么“學(xué)習(xí)什么技能”就是一個(gè)新的修飾。

具體實(shí)現(xiàn)

首先,創(chuàng)建一個(gè)接口 HeroAction

package DecoratorPattern;

public interface HeroAction {
    public void learnSkill();
}

然后,定義 Hero 實(shí)體類(lèi)實(shí)現(xiàn) HeroAction 接口

package DecoratorPattern;

public class Hero implements HeroAction{
    private String heroName;

    public Hero(String heroName) {
        this.heroName = heroName;
    }

    @Override
    public void learnSkill() {
        System.out.print("[" + heroName + "] 學(xué)習(xí)了技能");
    }
}

------ 到這里實(shí)現(xiàn)了原有功能“李青學(xué)習(xí)技能” ------
------ 下面開(kāi)始對(duì)原有功能做修飾 ------

接著,定義抽象裝飾類(lèi) SkillsDecorator 實(shí)現(xiàn) HeroAction 接口(持有 HeroAction 接口對(duì)象)

package DecoratorPattern;

public abstract class SkillsDecorator implements HeroAction {
    private HeroAction heroAction;

    public SkillsDecorator(HeroAction heroAction) {
        this.heroAction = heroAction;
    }

    @Override
    public void learnSkill() {
        if (heroAction != null)
            heroAction.learnSkill();
    }
}

最后,實(shí)現(xiàn)該裝飾類(lèi)來(lái)修飾 HeroAction 對(duì)象(即學(xué)習(xí)了什么技能)

package DecoratorPattern;

public class SkillsDecoratorImpl extends SkillsDecorator {

    private String skillName;

    public SkillsDecoratorImpl(HeroAction heroAction, String skillName) {
        super(heroAction);
        this.skillName = skillName;
    }

    @Override
    public void learnSkill() {
        super.learnSkill();
        System.out.print(" [" + skillName + "]\n");
    }

}

測(cè)試

package DecoratorPattern;

public class main {
    public static void main(String[] args) {
        HeroAction hero = new Hero("李青");
        SkillsDecorator sd = new SkillsDecoratorImpl(hero, "Q: 天音波/回音擊");
        sd.learnSkill();
    }
}

測(cè)試結(jié)果:


運(yùn)行結(jié)果.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容