Java设计模式之再从[暗黑破坏神"装备镶嵌宝石系统"]分析装饰(Decorator)模式

本文通过分析暗黑破坏神装备镶嵌宝石系统,探讨了Java设计模式中的装饰(Decorator)模式。相较于继承,装饰模式更灵活地为对象添加额外职责,如武器的特殊攻击效果。在代码示例中,展示了如何使用装饰模式为长剑赋予中毒、暴击和眩晕特效。同时,文章指出虽然装饰模式灵活,但大量装饰器类可能带来的问题,并提到了Java.IO中装饰器模式的应用。
摘要由CSDN通过智能技术生成

  在暗黑破坏神等RPG游戏中,会遇到如下的一些场景:我有一把很普通的武器,我通过给它“注入魔法力量”、“镶嵌宝石”,来使得它拥有一些攻击特效:例如,一把普通长剑,镶嵌红宝石后,可以附带火焰伤害,镶嵌了一个蓝宝石后,可以使得长剑攻击带有冰冻伤害。

  如何实现上述的机制呢?首先我们想到的是继承,因为,一个镶嵌了红宝石、蓝宝石的长剑,一定是一个镶嵌了宝石的长剑,并且一定一把长剑。如此下来,程序的结构会很复杂,而且你可能会想,要是镶嵌的是别的宝石怎么办呢?如果出了宝石外,可以镶嵌其他物品(如符文),那是不是应该把继承的结构改变呢?可见,继承并不是一个最优的方案。

  仔细分析一下这种情况,我们会发现,所谓“火焰伤害”、“冰冻伤害”,只是一些“攻击特效”,说白了就是长剑的攻击的装饰。我们仅仅是为了能够在长剑攻击的时候,增加一些职责:触发火焰伤害、触发冰冻伤害。这个时候我们就可以用到装饰(Decorator)模式——它的意图是动态地给一个对象添加一些额外的职责。就增加新功能来说,它比继承更为灵活。

  假设我想给我的长剑赋予眩晕、暴击和中毒攻击三种特效,那么Java代码可以这样写:

interface Weapon{
    void printInfo();
}

class Sword implements Weapon {
    public void printInfo(){ 
        System.out.println ("一把长剑");
    }
}

abstract class WeaponDecorator imp
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值