Strategy(策略模式):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。
STRATEGY—跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。
设计到的一些设计原则:
1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
2、针对接口编程,而不是针对实现编程。
3、多用组合,少用继承。
说明和类图
Context(应用场景):
个人理解:将某些行为抽象成接口,能够根据不同的情况实现不同的算法。然后通过主要的客户端类来调用。是一种组合的思想。
例如,agent2d代码中的strategy策略相关的地方有很多,例如每一种角色的划分,不同的角色执行不同的策略,还有区域的划分,可以根据球的不同区域执行不同的决策等等。而且在strategy.cpp里面定义了很对使用决策相关的函数和变量。
我们平时写acm算法中的,利用不同的排序算法解决不同的排序问题,应该也是应用了策略模式。
struts2中Dispatcher进行初始化第二步,主要是完成对配置元素的加载器的初始化工作。
这些配置加载器的具体实现核心,是一个针对不同数据格式的配置元素的读取过程。由于配置的形式是多种多样的,这就导致了读取配置的算法也各不相同。
在这里,无论有多少中策略实现,只要他们的行为特征是一样的,可以从中获取策略实现的结果并加以处理。
策略实现可以任意进行了灵活的扩展,而对客户端调用者而言则是透明的。