设计模式——装饰者模式

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

先看下类图:

直接看代码吧:

/**
 * @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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值