STRATEGY(策略)——对象行为模式
来源:互联网 发布:最新java面试题及答案 编辑:程序博客网 时间:2024/04/28 19:42
STRATEGY(策略)——对象行为模式
1.意图
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
2.别名
政策(Policy)
3.动机
l 人机对弈程序可以采用多种搜索算法。将这些算法硬编码进使用它们的类中是不可取的,其原因如下:
l 客户程序如果直接包含搜索算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护,尤其当需要支持多种搜索算法时问题会更加复杂。
l 不同的时候需要不同的算法,我们不想支持我们并不使用的搜索算法。
l 当搜索功能是客户程序的一个难以分割的成分时,增加新的搜索算法或改变现有算法将十分困难。
我们可以定义一些类来封装不同的搜索算法,从而避免这些问题。一个以这种方法封装的算法成为一个策略(strategy),如下图所示。
搜索策略不是Composition类实现的,而是由抽象的CSearchEngine类的子类各自独立地实现的。以下是图中所设计类的说明:
1. CSearchEngine类:搜索引擎基类.
2. CNegaMaxEngine类:负极大值法搜索引擎.
3. CAlphaBetaEngine类:采用了Alpha-Beta剪枝技术的搜索引擎.
4. CFAlphaBetaEngine类:fail-softalpha-beta搜索引擎.
5. CHistoryHeuristic类:历史启发类.
6. CAlphabeta_HHEngine类:带历史启发的Alpha-Beta搜索引擎.
7. CAspirationSearch类:渴望搜索引擎.
8. CIDAlphabetaEngine类:迭代深化搜索引擎.
9. CMTD_fEngine类:MTD(f)搜索引擎.
10. CTranspositionTable类:置换表.
11. CAlphaBeta_TTEngine类:加置换表的Alpha-Beta搜索引擎.
12. CPVS_Engine类:极小窗口搜索引擎.
13. CNegaScout_TT_HH类:使用了置换表和历史启发的NegaScout搜索引擎.
Composition维护对CSearchEngine对象的一个引用。一旦Composition需要搜索,它就将这个职责转发给它的CSearchEngine对象。Composition的客户指定应该使用哪一种CSearchEngine的方式就直接将它想要的CSearchEngine装入Composition中。
4.适用性
当存在以下情况时使用Strategy模式
l 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。
l 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层次时,可以使用策略模式。
l 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
l 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以替代这些条件语句。
- 对象行为模式——策略模式(Strategy)
- STRATEGY(策略)——对象行为模式
- 策略模式(Strategy)——对象行为型模式
- 对象行为型模式——策略模式(Strategy Pattern)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- STRATEGY(策略)-对象行为模式
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 策略模式Strategy(对象行为型)
- 设计模式(一)——Strategy策略模式(对象行为型模式)
- 设计模式之七:Strategy(策略)—对象行为型模式
- 行为模式——策略( strategy)模式
- strategy(策略)—对象行为模型
- 设计模式08-策略模式Strategy(对象行为模式)
- 行为模式:Strategy(策略)
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- MAPX问题续1(创建图层延时)
- 路由器、HUB、交换机是一个东西吗?
- javascript的调试工具
- 关于S60 3rd资源本地化的实现
- 优美的祝词
- STRATEGY(策略)——对象行为模式
- 金额的大写转换
- Struts+Hibernate开发实践 分页的实现
- XP下安装SQL2000企业版
- 国内外信息安全研究现状及发展趋势[转载自Wendy]另外一篇:Dengguo Feng国内外信息安全研究现状及发展趋势
- Mac地址全了解- -
- .NET框架下使用双缓冲技术绘图
- 程序优化总结--转自晕船的水手
- 实例解析C++/CLI线程之多任务