先看下下面的这部分代码,有一个职业的枚举,用来确认有哪些职业。在FGO类中,有一个Attack函数,表示不同角色进行不同的***。

策略模式_第1张图片


        初看这段代码没有什么问题,但是随着职业的增加,还会写很多的if else语句,这里就存在两个问题

        1、每次都得编译这部分代码?代码可复用性?

        2、如果每次进来都是最后一个else分支,那是不是前面的判断都是无用的?这是不是就导致了程序需要的内存变大了?


带着这两个问题,咱们来看策略模式的解决办法


首先,咱们把每个人物都是有***属性的,咱们先把这部分抽象出来

spacer.gif策略模式_第2张图片


接着,不同职业的人物,就可以通过继承,重写attack的方式,来完成不同职业的***方法

策略模式_第3张图片



这样,咱们的策略模式就完成了一大半了,那么咱们怎么来使用策略模式的代码呢,

策略模式_第4张图片


        这就是策略模式的全部内容,这里有提到工厂方法,后续会对工厂方法进行学习,说明。


        可以看到,如果以后有新增的职业时,只需要增加一个该职业的子类,以及修改工厂方法中的部分内容就可以了。这样代码就具有了高可用性,同时也解决了之前的两个问题。代码大部分都是稳定的,只有少部分是变化的。

        好了,今天就到这里。睡觉

我是程序员的颈椎, 欢迎大家一起学习交流QQ群689930130