装饰器模式-游戏装备例子

装饰器模式定义
  1. 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生产的子类更为灵活
  2. 原有类接口component,及具体实现类concreteComponent,他们需要添加一些职责。
  3. Decorator装饰类继承component,
  4. concreteDecorator是为component来增加功能的。
例子1
  1. 这个例子我们已人为component,想为人添加额外各种衣服的后的包装类
  2. 穿各种衣服类则是具体的包装类。
  3. 对于client则使用穿完衣服的人组件。
代码2例子讲解
  1. 游戏场景中计算装备的攻击值。
  2. 我们定义装备类为具体的组件
  3. 各种宝石包装类组件去包装装备。
  4. client端使用类则使用包装后的装备,输出加强的攻击值。

/**
 * 装备接口
 */
public interface IEquip {

    /**
     * 计算攻击力
     *
     * @return
     */
    public int caculateAttack();

    /**
     * 装备的描述
     *
     * @return
     */
    public String description();

}


/**
 * 武器
 * 攻击力20
 *
 * @author zhy
 */
public class ArmEquip implements IEquip {

    @Override
    public int caculateAttack() {
        return 20;
    }

    @Override
    public String description() {
        return "屠龙刀";
    }

}


/**
 * 抽象的包装类,
 */
public interface IEquipWrap extends IEquip{

}
/**
 * 红宝石装饰品 每颗攻击力+15
 *
 * @author zhy
 */
public class RedGemDecorator implements IEquipWrap {
    /**
     * 每个装饰品维护一个装备
     */
    private IEquip equip;

    public RedGemDecorator(IEquip equip) {
        this.equip = equip;
    }

    @Override
    public int caculateAttack() {
        return 15 + equip.caculateAttack();
    }

    @Override
    public String description() {
        return equip.description() + "+ 红宝石";
    }

}
/**
 * 黄宝石装饰品
 * 每颗攻击力+10
 *
 * @author zhy
 */
public class YellowGemDecorator implements IEquipWrap {
    /**
     * 每个装饰品维护一个装备
     */
    private IEquip equip;

    public YellowGemDecorator(IEquip equip) {
        this.equip = equip;
    }

    @Override
    public int caculateAttack() {
        return 10 + equip.caculateAttack();
    }

    @Override
    public String description() {
        return equip.description() + "+ 黄宝石";
    }

}

项目中应用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值