首页 > 其他 > 详细

设计模式——装饰者模式

时间:2019-03-31 01:09:53      阅读:171      评论:0      收藏:0      [点我收藏+]

这次来看下装饰者模式,如有不对请提出,共同提高,谢谢!!!

先看下类图:

技术分享图片

直接看代码吧:

/**
 * @Author:shenqi
 * @Description: DOTA2英雄
 * @Date:2019/3/30 23:50
 */
public interface Dota2Hero {

    void getSkills();
}

  

/**
 * @Author:shenqi
 * @Description: 剑圣
 * @Date:2019/3/30 23:51
 */
public class Jugg implements Dota2Hero {

    @Override
    public void getSkills() {
        System.out.println("啥技能都没有");
    }
}

  

/**
 * @Author:shenqi
 * @Description:
 * @Date:2019/3/30 23:53
 */
public abstract class Skills implements Dota2Hero {

    public Dota2Hero dota2Hero;

    public Skills(Dota2Hero dota2Hero) {
        this.dota2Hero = dota2Hero;
    }

    public abstract void getSkills();
}

  

/**
 * @Author:shenqi
 * @Description:
 * @Date:2019/3/31 00:01
 */
public class 剑刃风暴 extends Skills {

    public 剑刃风暴(Dota2Hero dota2Hero) {
        super(dota2Hero);
    }

    @Override
    public void getSkills() {
        System.out.println("学习了剑刃风暴");
    }
}

  

/**
 * @Author:shenqi
 * @Description:
 * @Date:2019/3/31 00:14
 */
public class 剑舞 extends Skills {

    public 剑舞(Dota2Hero dota2Hero) {
        super(dota2Hero);
    }

    @Override
    public void getSkills() {
        System.out.println("学习了剑舞");
    }
}

  

/**
 * @Author:shenqi
 * @Description:
 * @Date:2019/3/31 00:15
 */
public class 无敌斩 extends Skills {

    public 无敌斩(Dota2Hero dota2Hero) {
        super(dota2Hero);
    }

    @Override
    public void getSkills() {
        System.out.println("学习了无敌斩");
    }
}

  

/**
 * @Author:shenqi
 * @Description:
 * @Date:2019/3/31 00:14
 */
public class 治疗守卫 extends Skills {

    public 治疗守卫(Dota2Hero dota2Hero) {
        super(dota2Hero);
    }

    @Override
    public void getSkills() {
        System.out.println("学习了治疗守卫");
    }
}

  

public class JuggMain {

    public static void main(String[] args) {
        Dota2Hero jugg = new Jugg();
        jugg.getSkills();

        Skills first = new 剑刃风暴(jugg);
        first.getSkills();

        Skills second = new 剑舞(first);
        second.getSkills();

        Skills third = new 治疗守卫(second);
        third.getSkills();

        Skills last = new 无敌斩(third);
        last.getSkills();
    }
}

  

说明:

1.符合开放关闭原则,对扩展开放,对修改关闭

2.能够灵活增加需要扩展的类

3.问题是需要创建的类是在太多了,和工厂可以结合使用。

设计模式——装饰者模式

原文:https://www.cnblogs.com/shenqiaqia/p/10629916.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!