java设计抽象英雄类_从王者荣耀看设计模式-策略模式(java版)

61c5cdc5b791?from=groupmessage

王者荣耀

曾经我也是一名玩农药的大学生,但现在已经弃了,别问我为什么(被坑爹队友坑的哭。。。)。而今天我们来把让农药变荣耀,我们来从王者荣耀中看设计模式的策略模式。

61c5cdc5b791?from=groupmessage

射手

00.分析

我们先来思考,王者荣耀现在已经发展到60多个英雄了,他们大致分为坦克,战士,刺客,射手,法师,辅助六种角色。因为我喜欢玩射手,下面就拿射手来说明吧。射手相同的特征是射击,但每个射手都有不同的射击状态,可以佩戴不同的召唤师技能等等。

我们找一找射手这类英雄的相同点,相同点都是射击攻击,不同点是射击的方式是不同的,后羿拿弓箭射,鲁班是机枪扫射,狄仁杰是拿令牌扔,还有每个召唤师佩戴的技能也是可以不一样的。

找出这些不同点,如何使用面向对象来解决呢?面向对象的三大特性:封装,继承,多态。很容易想到的是,我们可以设计一个射手的抽象类,里面是一个射手应有的各种方法,比如说普通攻击,召唤师技能,技能攻击等等,然后在其子中类继承这种方法,然后使用多态就可以用父类来调用子类方法了。这貌似是可行的,可是大家知道王者荣耀是在一直更新的,以后会不断有新英雄,新装备,新皮肤,新技能出现,它们每个新的出现,我们都要覆写一遍父类中的方法,只用继承来做,不具有灵活性,对王者荣耀未来的更新支持很差。

我们再把思考的范围缩小一点,就拿召唤师技能来说吧。每个英雄是可以佩戴相同的召唤师技能的,但召唤师技能也是有多种的,这里你不能使用继承来实现英雄有召唤师技能了吧。因为英雄和召唤师技能之间是Has-a,而不是Is-a的关系,机智的你想到java中的接口interface,没错,我们可以定义各种召唤师的接口来使英雄获得不同的召唤师技能,但是我们再想一想,我们是可以在对战之前选择召唤师技能的,而不是每个英雄固定的,只用接口的话,召唤师的技能在英雄对象生成的时候就固定了,或者说,每个英雄是有具有召唤师技能的能力,但是我们并不能确定这个技能具体是什么。你可能还会想,我们可以加一些判断来给英雄不同的召唤师技能,但如果这样,我们每个英雄又会有多种不同的英雄(每个召唤师技能的接口不同),但想一想这种方式肯定是不可取的,工作量太TM大了,聪明的程序员肯定不会这样做。

61c5cdc5b791?from=groupmessage

召唤师技能

其实我们是想有一种可以动态加载召唤师技

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式是一组经过实践验证的面向对象设计原则和模式,可以帮助开发人员解决常见的软件设计问题。下面是常见的23种设计模式: 1. 创建型模式(Creational Patterns): - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式(Behavioral Patterns): - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 4. 并发型模式(Concurrency Patterns): - 保护性暂停模式(Guarded Suspension Pattern) - 生产者-消费者模式(Producer-Consumer Pattern) - 读写锁模式(Read-Write Lock Pattern) - 信号量模式(Semaphore Pattern) - 线程池模式(Thread Pool Pattern) 这些设计模式可以根据问题的特点和需求来选择使用,它们提供了一些可复用的解决方案,有助于开发高质量、可维护且易于扩展的软件系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值