java设计形式之策略模式(Strategy模式)

java设计模式之策略模式(Strategy模式)
java设计模式之策略模式(Strategy模式)
(2011-07-31 20:24:52)转载标签: 赵云吴国算法策略类锦囊妙计杂谈 分类: JAVA基础 
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。

一句话形容就是:准备一组算法,并将每一个算法封装起来,似的他们可以互换。策略模式似的算法可以独立于使用他的客户而变化。

使用场景:

    许多相关的类仅仅是行为有异。“策略”提供了一种多个行为中的一个行为来配置一个类的方法。

    需要使用一个算法的不同变体。例如,你可能会定义一些反应不同的空间/时间权衡的算法。当这些变体实现为一个算法的类层时,可以使用策略模式。

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

    一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支一如他们各自的Strategy类中以代替这些条件语句。

结构:

策略模式设计到的三个角色:

    环境角色:持有一个Strategy类(策略类)的引用

    抽象策略角色:策略类,通常由一个借口或者抽象类实现

    具体策略角色:包装了相关的算法和行为

通俗例子:

    三国演义中,赵云保护刘备去吴国迎娶美女,诸葛亮给赵云三条锦囊妙计:走乔国老的后门,求孙国太放任,请孙夫人退兵。

    赵云-->按计行事

环境角色:赵云-->由他来决定选择策略

抽象策略角色:(接口)锦囊妙计-->按计行事(抽象方法)

具体策略角色:三条妙计(单独使用的)



策略模式优点:

    提供了管理相关算法的办法

    提供了可以替换继承关系的办法

    避免使用多重条件转移语句

缺点:

    客户端必须知道所有的策略类,并自行决定使用哪一个策略类

    造成很多的策略类