当前位置:C++技术网 > 资讯 > 关于策略模式的一些具体概念和实例

关于策略模式的一些具体概念和实例

更新时间:2016-01-16 23:48:03浏览次数:1+次

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

STRATEGY—跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。


设计到的一些设计原则:

1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

2、针对接口编程,而不是针对实现编程。

3、多用组合,少用继承。



说明和类图

Context(应用场景):


1、需要使用ConcreteStrategy提供的算法。
2、 内部维护一个Strategy的实例。
3、 负责动态设置运行时Strategy具体的实现算法。
4、负责跟Strategy之间的交互和数据传递。
Strategy(抽象策略类):
1、 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy(具体策略类):
2、 实现了Strategy定义的接口,提供具体的算法实现。




个人理解:将某些行为抽象成接口,能够根据不同的情况实现不同的算法。然后通过主要的客户端类来调用。是一种组合的思想。

例如,agent2d代码中的strategy策略相关的地方有很多,例如每一种角色的划分,不同的角色执行不同的策略,还有区域的划分,可以根据球的不同区域执行不同的决策等等。而且在strategy.cpp里面定义了很对使用决策相关的函数和变量。

我们平时写acm算法中的,利用不同的排序算法解决不同的排序问题,应该也是应用了策略模式。

struts2中Dispatcher进行初始化第二步,主要是完成对配置元素的加载器的初始化工作。

这些配置加载器的具体实现核心,是一个针对不同数据格式的配置元素的读取过程。由于配置的形式是多种多样的,这就导致了读取配置的算法也各不相同。

在这里,无论有多少中策略实现,只要他们的行为特征是一样的,可以从中获取策略实现的结果并加以处理。

策略实现可以任意进行了灵活的扩展,而对客户端调用者而言则是透明的。