目录
[显示]

1.摘要

Strategy模式定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

2. 针对问题

当对象要调用某类算法时(例如排序),同一个算法可能有多种实现方式,客户程序中如果直接包含算法代码会让程序变得庞大并难以维护,这时如果要更改算法实现可能需要重写整个客户程序。Strategy模式将算法封装到独立的类型中,从而避免这些问题。

3. 介绍

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

4. 实现

Strategy模式的静态图如下:

其中:
Strategy类型声明算法接口,并在ConcreteStrategy类型中实现具体算法,必要时可以在算法中回调Context。
Context对象中维护strategy对象的引用,并将算法调用转发给Strategy。

在Context调用Strategy接口时可以传递算法必要的参数,或者直接传递Context本身,前者将使得Strategy和Context进一步解耦。
实现Context时可以使Strategy对象成为可选的,如果Context中有Strategy对象,则执行算法,否则继续执行。
实现Strategy对象时可以考虑使用Flyweight模式降低内存空间占用。

5. 特点

1、Strategy为同一算法声明提供了可重用的算法实现,并且可以实现算法实现的动态切换。
2、Strategy模式可以消除一些判断语句,如:

3、客户在选择Strategy时必须了解不同Strategy实现的区别。
4、本模式增加了Strategy和Context之间通信的开销。

6. 相关文章

1、设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》,