1、策略模式是把算法分离出来,解决的问题是如果很多类都有同一个算法,那么就不需要每个类都覆盖一次。而是改成把算法(接口和实现)抽出来,新建具体类的时候(某种英雄),把算法的实现赋予给英雄即可,不需要每个英雄类自己再实现一次算法,这样就减少了很多代码。
2、正因为如此,如果每个类都需要覆盖基类的方法,而不是很多类都用同一个基类方法,那么策略模式是不适用的。
比如:因为有很多种英雄的移动方法都是一样的,所以这是一种可以抽出来的策略,便于减少代码。
如果每种英雄的移动方法都不一样,那么把“移动”策略抽出来是没有意义的,也就是说,策略算法用在这里是没有意义的。
总结:只有当(目前或不久的将来)有很多类使用了同样的算法,那么才使用策略模式,把算法独立出来,否则策略模式是不适用的。
参考:英雄联盟之「策略模式」