美文网首页程序员
设计模式(1)——装饰器模式

设计模式(1)——装饰器模式

作者: Funk_V | 来源:发表于2018-04-12 23:34 被阅读0次

    装饰器模式

    可以理解为在不改变原有程序的前提下,向一个现有的对象添加新的修饰(功能)。
    例如:原有程序实现的功能为“李青学习技能”,这时新的业务要求显示学习的具体技能,那么“学习什么技能”就是一个新的修饰。

    具体实现

    首先,创建一个接口 HeroAction

    package DecoratorPattern;
    
    public interface HeroAction {
        public void learnSkill();
    }
    
    

    然后,定义 Hero 实体类实现 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 + "] 学习了技能");
        }
    }
    
    

    ------ 到这里实现了原有功能“李青学习技能” ------
    ------ 下面开始对原有功能做修饰 ------

    接着,定义抽象装饰类 SkillsDecorator 实现 HeroAction 接口(持有 HeroAction 接口对象)

    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();
        }
    }
    
    

    最后,实现该装饰类来修饰 HeroAction 对象(即学习了什么技能)

    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");
        }
    
    }
    

    测试

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

    测试结果:


    运行结果.png

    相关文章

      网友评论

        本文标题:设计模式(1)——装饰器模式

        本文链接:https://www.haomeiwen.com/subject/pvrqkftx.html