Posted on 2007-11-21 15:35
game of programming 阅读(425)
评论(1) 编辑 收藏 所属分类:
Design Pattern
《设计模式》中是这样描述Strategy模式的:定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。Strategy模式使算法可以独立于使用它的客户的变化。
Strategy模式的UML图如下所示:
从上图可以看出,具体的算法隐藏在AbstractStrategy类背后,Client无需知道具体算法如何实现,它只需传给Context相关参数即可。在Context中来实现具体算法的选择(通过Client传来的参数)。而算法的具体实现则通过ConcreteStrategy来完成。
这样做有以下几个好处:
1 算法的选择与实现相分离。符合“找出变化并封装之”的原则。如果需要修改或者添加新的算法,只需要修改相对应的ConcreteStrategy或者增加新的ConcreteStrategy并且修改算法的选择即可。
2 Client无需关心算法如何选择和具体实现,只需关心结果。