Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save MikeLing/e52d4b5cd73a5830979a1a886a4255c9 to your computer and use it in GitHub Desktop.
Save MikeLing/e52d4b5cd73a5830979a1a886a4255c9 to your computer and use it in GitHub Desktop.

问题1: 如果需要重构hero,需要修改哪些代码,有没有更好的方式? 问题2: 如果需要增加一个hero或者cards,应该怎么做到最小修改?


我认为两个问题都可以视为设计模式的问题,即如何设计可复用的hero和card类。首先我认为可以定义 HeroCard 这两个抽象类,所有的英雄和卡片实现这两个抽象类的方法,这样当需要添加一个新英雄或卡片的时候可以随时扩充,只需要实现虚基类定义的接口即可。

其次,在调用类内部方法时候可以采用传递虚基类(接口)而不是传递具体类型的方式,这样在修改了某几个具体类型之后也不需要对调用函数进行修改。比如在执行英雄技能和卡牌效果时,实质上都是一种影响自己或者是其他英雄状态的方式,因此英雄的技能(Skill)和 卡片的效果(Effect)都可以继承与同一个抽象接口(magic),这样在执行英雄技能和卡片效果的时候可以调用同一套接口函数,加强了可重用性。

picture

@MikeLing
Copy link
Author

MikeLing commented Oct 31, 2017

不知道为啥,图片一直gist里加载不出来,为了方便查看,我把图直接贴在这里了。skill和effect派生于magic类,而magic是个虚基类,因此在调用英雄技能和卡片效果的时候只需要传递虚基类,在需要实例化的时候用工厂模式实例化即可。

diagram

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment