LOL设计模式之「策略模式」

之前写过一篇《什么是「设计模式」?》,没有类图,没有代码,有些同学说看不太懂,今天给大家带来策略模式(有图,有码,有真相!)。

玩过LOL的同学都知道,LOL有上百个英雄,如果用OO技术来设计这些英雄该怎么办?

小明:简单,先来个父类(Superclass),然后让所有的英雄继承此父类,不同的方法重写父类方法即可。

每个英雄的QWER技能都是不一样的,重写可以没问题,但是召唤师技能每个英雄都是固定的几个难不成也都要子类重写?

小明:对哦,召唤师技能如果都让子类重写那么就会产生多个子类代码重复,怎么办呢?

设计原则:找出应用可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

小明:变化之处那就是召唤师技能,可以把召唤师技能抽取出来写成一个接口,所有召唤师技能都需要实现这个接口。

设计原则:针对接口编程,而不是针对实现编程。

小明:这样可以把所有固定的召唤师技能先写好,等玩家选择召唤师技能只需要设置具体的召唤师技能即可。就算以后有新的召唤师技能只需要实现这个接口就好了,具体实现类可以互相的替换。

设计原则:多用组合,少用继承。

小明:思路理清楚了,那就直接上代码。

召唤师技能接口

具体实现

英雄类

客户端

这就是所谓的「策略模式」了,定义了算法(召唤师技能接口),分别封装起来(具体的实现类:传送、治疗术),让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

以上代码块用中文编写类名、变量名是为了让大家更好的理解,在实战过程中记得替换成相对应的英文。

打赏支持我写出更多好文章,谢谢!

打赏作者

打赏支持我写出更多好文章,谢谢!

1 3 收藏 5 评论

关于作者:陈宇明

微信公众号「码个蛋」Android技术、职场精进、周一至周五早上7点准时推送。为你提供最快捷的精进之路。 个人主页 · 我的文章 · 61 ·      

相关文章

可能感兴趣的话题



直接登录
最新评论
  • cologler   2016/09/13

    我这评论跑题了,不聊涉及模式,只说下 LOL 的实际实现。

    之前我无聊,也考虑过这个问题。

    如果是做 app,字面量固然可以全写进代码里;但是游戏,因为数值经常调整,为了节省程序成本,这部分一般由策划定(在我之前的游戏开发公司里)。

    这里面就有一个临界值。若能全部内容可配置,那几不需要实现技能接口,只需要一个技能类,然后 new 的时候传配置文件的路径就可以了。

    我比较深究的是这个可配置或不可配置的临界值在哪里,究竟有没有必要到需要创建技能接口。

    • 骑猪猪吹泡泡   2016/09/14

      有一种技能的设计方式是划分更小的feature,每个技能实际是组合不同的feature,

      每个feature数值做到可配置,策划只需要组合不同的feature就可以创造一个新的技能。

      eg:

      盖伦的q技能:1.移除减速 2.移动加成m,3.物理伤害X 4.沉默效果。

      程序实现基本的feature后,策划通过配置就可以解决英雄的技能问题。

      划分feature后还有点要考虑的就是互斥和优先级。

      如1.对敌方造成伤害  2.对造成治疗。

      这两个feature到底是互斥呢还是采用优先级呢。

       

  • DXkite 学生党 2016/09/14

    额,昨天才搞到[设计模式]才看了引言。话说大大类图用啥画的?

  • 太阳__sun   2016/09/18

    一下子就看明白了,从未有过如此流畅的学习体验

跳到底部
返回顶部