统一类型封装处理,避免复杂逻辑。

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 —- GoF 《设计模式:可复用面向对象软件的基础》

就是说有N个算法,它们要实现的目的是相同的,所以各算法之间是可以互相替换的,每个客户端独立选择使用哪一个算法,不同的客户端之间可以选择不同的算法。

生活中的例子

在我们的日常生活中就有很多使用策略模式的例子。
上班需要使用某一种交通方式从家去公司。具体使用哪种交通方式,根据家到公司的距离,不同的同学会选择不同的交通方式,例如搭乘地铁、自驾、骑行、步行等。

什么时候使用策略模式

1. 当一个行为因不同的条件要执行不同的方法体时

其实就是我们平常见到的if else。对于项目中的if else语句,可以考虑下是否可以定义不同的具体策略类,然后将else中的语句移入到各个具体策略实现中。

2. 当许多相似的类,仅仅是行为上有差异时

这些相似的类是不是就像各个不同的策略实现呢?把那些相似的类利用策略模式重构一波后,代码结构会更加清晰,可读性也会提高很多!

3. 当对于一个算法,已有几种不同的实现方式,而且后续还可能会增加新的实现方式时

用策略模式,可以在要新增算法的实现方式时,不修改已有算法的实现,大大降低了引入新策略的风险。