码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式(Strategy)——对象行为型模式

时间:2015-05-27 10:12:15      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

策略模式的意图:

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

该模式具有以下特征:

1、完成一件事不止有一种可以选择的方法,或者虽然现在是唯一的,但预期会不断改进或需要“备胎”。

2、各方法视图解决的是同一件事。

3、每个方法是独立于其它方法的。

4、方法的取舍因时、因势、因人而异,临场处置时择优选择一个。

策略模式的结构图如下:

技术分享

Strategy(策略):定义所有支持的算法的公共接口。Context使用这个接口来调用某个ConcreteStrategy定义的算法。

ConcreteStrategy(具体策略):以Strategy接口实现的某种具体算法。

Context(上下文):用一个ConcreteStrategy对象来配置。

                                 维护一个对Strategy对象的引用。

                                 可定义一个接口来让Strategy访问它的数据。

策略模式的Java代码实现:

技术分享

技术分享

技术分享

技术分享

测试代码如下:

技术分享

策略模式的适用性:

1、许多相关的类仅仅是行为不同。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。

2、需要使用一个算法的不同变体。

3、算法使用客户不应该知道的数据,可使用策略模式以避免暴露复杂的、与算法相关的数据结构。

4、一个类定义多个行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。

策略模式的优缺点:

1、相关算法系列  Strategy类层次为Context定义了一系列的可供重用的算法或行为。

2、一个替代继承的方法  继承提供了另一种支持多种算法或行为的方法。可以直接生成一个Context类的子类,从而给它不同的行为。而将算法封装在独立的Strategy类中使得         你可以独立于其Context改变它,使它易于切换,易于理解,易于扩展。

3、实现的选择   Strategy模式可以提供相同的行为的不同的实现。

4、消除了一些条件语句   Strategy模式提供了用条件语句选择所需的行为以外的另一种选择。

5、客户必须了解不同的Strategy  本模式有一个潜在的缺点,就是一个客户要选择一个合适的Strategy就必须知道这些Strategy到底有何不同。

6、Strategy与Context之间的通信开销。

7、增加了对象的数目。

策略模式(Strategy)——对象行为型模式

标签:

原文地址:http://blog.csdn.net/u013799929/article/details/46041645

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!