016-设计模式一:策略模式(Strategy)

2017-08-14  本文已影响94人  AncientMing

上一篇:015-CFBridgingRelease简析

一、说白了

所谓策略模式(Strategy),说白了就是:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。也称为政策模式(Policy)。

二、举例

三、优点

1、避免使用多重条件判断。

我们当然可以使用if 和else if来实现所需算法,但我们为什么要使用策略模式而不是直接使用if判断语句呢?我个人理解有以下几点。

2、算法可以自由切换。

想换算法比较方便、简单。

3、扩展性良好。

来一个新人,新加一种算法,直接新建一个类就写,减少甚至避免了阅读前人代码。最怕的是上来就先看几天前人写的代码再开工,而且看得不是很明白心里虚虚的。

4、提供相同行为的不同实现。

客户可以根据不同时间 /空间权衡取舍要求从不同策略中进行选择。

四、缺点

1、策略类较多。

使用策略模式,一般会造成类比较多。

2、所有策略类都需要对外暴露。

一个客户要选择一个合适的Strategy就必须知道这些Strategy到底有何不同。此时可能不得不向客户暴露具体的实现问题。因此仅当这些不同行为变体与客户相关的行为时 , 才需要使用Strategy模式。

3、Strategy和Context之间的通信开销。

使用到Context的话,可能会有额外开销。

无论各个ConcreteStrategy实现的算法是简单还是复杂, 它们都共享Strategy定义的接口。因此很可能某些 ConcreteStrategy不会都用到所有通过这个接口传递给它们的信息;简单的 ConcreteStrategy可能不使用其中的任何信息!这就意味着有时Context会创建和初始化一些永远不会用到的参数。如果存在这样问题 , 那么将需要在Strategy和Context之间更进行紧密的耦合。

五、结构

策略模式结构.jpg

六、使用场景

1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

2、一个系统需要动态地在几种算法中选择一种。

3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

七、注意点

八、模式的组成

九、总结分析

十、个人总结

正常写代码一般而言用不到这种模式,但还是有必要知道这种模式的。在对代码进行优化的时候,可以使用策略模式。用到的场景相对是比较少的。

下一篇:017-设计模式二:适配器模式(Adapter)

上一篇下一篇

猜你喜欢

热点阅读