统一类型封装处理,避免复杂逻辑。
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 —- GoF 《设计模式:可复用面向对象软件的基础》
就是说有N个算法,它们要实现的目的是相同的,所以各算法之间是可以互相替换的,每个客户端独立选择使用哪一个算法,不同的客户端之间可以选择不同的算法。
生活中的例子
在我们的日常生活中就有很多使用策略模式的例子。
上班需要使用某一种交通方式从家去公司。具体使用哪种交通方式,根据家到公司的距离,不同的同学会选择不同的交通方式,例如搭乘地铁、自驾、骑行、步行等。
什么时候使用策略模式
1. 当一个行为因不同的条件要执行不同的方法体时
其实就是我们平常见到的if else。对于项目中的if else语句,可以考虑下是否可以定义不同的具体策略类,然后将else中的语句移入到各个具体策略实现
中。
2. 当许多相似的类,仅仅是行为上有差异时
这些相似的类是不是就像各个不同的策略实现
呢?把那些相似的类利用策略模式重构一波后,代码结构会更加清晰,可读性也会提高很多!
3. 当对于一个算法,已有几种不同的实现方式,而且后续还可能会增加新的实现方式时
用策略模式,可以在要新增算法的实现方式时,不修改已有算法的实现,大大降低了引入新策略的风险。