定义
定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们能更加独立
在策略模式中,这些不同的计算方式就是所谓的算法,而这些算法中的每一个
都应该独立出来,将计算的细节加以封装隐藏,并让它们成为一个算法类群组。客户端
只需根据情况来选择对应的算法即可,至于计算方式及规则,客户端不需要去理会。
策略模式和状态模式
两者的结构类图十分相似,两者都被GoF归类在行为模式(Behavioral Patterns)分类下,
都是由一个Context类来维护对象引用,并借此调用提供功能的方法。
State是在一群状态中进行切换,状态之间由对应和连接的关系;Strategy则是由一群没有
任何关系的类所组成的,不知道彼此的存在。
State受限于状态机的切换规则,在设计的初期就会定义所有可能的状态,就算后期追加也
需要和现有的状态有所关联,而不是想加入就加入;Strategy是由封装计算方法而形成的一种
设计模式,算法之间不存在任何的依赖关系,有新增的算法就可以马上加入或者替换。
策略模式的应用
角色扮演型游戏(RPG)的属性计算系统,使用到“转换计算”的方式来获取角色最终要使用的属性
网络游戏的注册账号的方式等等
因条件不同而需要有所选择时,刚入门的时候我们可能都会第一想到的是switch case语句
或者if else来实现,但遇到有一定规模需要长期维护的项目时候,最好选用策略模式,这样将有
利于项目的维护。
将复杂的公式计算从客户端独立出来成为一个群组,之后客户端可以按照情况来决定使用的
计算公式策略,既可以提高系统应用的灵活程度,也强化了系统中对所有计算策略的维护方式。让
后续开发人员很容易就找出相关计算公式的差异,同时将修改点也缩小到计算公式本身,不会影响到
客户端。