意图:策略模式就是定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。这个模式可以使得算法独立于使用它的客户变化而变化。
动机:有许多算法可以对数组进行排序,将这些排序算法编写进使用它们的类中是不取的。原因是因为如果将排序算法编写进使用的类中将会使系统变得复杂,并且难以维护。不同的时候可能需要使用不同的排序算法,并不需要支持不使用的排序算法。当排序算法是程序中必不可少的一部分时,增加新的排序算法或者改变现有的算法将会变得非常困难。我们可以定义一些类来封装这些算法,即一个一个策略。
适用性:许多相关的类仅仅是行为有异;需要使用一个算法的不同变体;算法使用客户应该不知道的数据;一个类中定义了多种行为,并且这些行为在这个类的操作中以多条件语句的形式出现。
结构如下:
其中Context是上下文对象,Strategy是策略接口,而ConcreteStrategy是具体的策略类,其实现了算法的具体步骤。
代码示例:
1 |
|
其中strategy是每个策略的接口,而ConcreteStrategy则是具体实现的策略类,其实现了Strategy中定义的接口,并根据Context的调用进行选择合适的策略。