首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

谋略模式(Strategy)

2012-11-09 
策略模式(Strategy)Strategy 属于行为模式,用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类

策略模式(Strategy)
   Strategy 属于行为模式,用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,它可以客户端的选择来,决定用什么实现。
    Context(上下文环境) 其内组合了一个策略的抽象类,然后具体的实现交给继承策略抽象类的子类去实现。
    从上面一句话,可以看到,Strategy 涉及到三个角色:
  Context环境角色:它是使用策略模式的场景,即持有一个策略类。
   抽象策略角色:这是一个抽象角色,通过是由一个接口事抽象类实现,这个类提供所有的具体策略所需的接口。
    具体策略(ConcreteStrategy)角色:实现抽象策略类提供的接口,不同的实现,有不同的具体策略类。




    模板可以是这样的:
上下文角色:

public class Context{   private Strategy strategy;   /**   * 策略方法,算法   */    public void algorithm()    {      strategy.strategyAlgorithm();    }}


抽象策略角色:
  public abstract class Strategy  {     /**      * 抽象策略方法,算法      */    public abstract void strategyAlgorithm();   }


具体策略类:

   public class ConcreteStrategy extends Strategy{    /**     *  策略实现     */    public void strategyAlgorithm()    {       //different   subStrategy have different algorithm     }}


从这个模板中可以知道:在同一个环境中,抽象策略中只是定义了行为,相同的行为而不同的实现方式交由具体的策略类去实现。

何时使用策略模式:
   a.一个系统里面有许多类,但是他们的区别只是他们的行为,那么可以使用Strategy动态让一个对象选择行为的一种。
   b.一个系统动态的在几个算法中选择一种。
  c.一个系统的算法使用的数据不可以让客户端知道。
  d.如果一个对象有很多的行为,不用恰当的模式,这些行为就只好使用多重条件选择语句来实现,如果这时使用策略模式可以避免使用难以维护的多重选择语句。

Strategy的优点与缺点:
  a.恰当使用继承,把公用代码移动到父类中,从而避免重复的代码。
  b.策略模式提供了可以替换继承者关系的办法。
  c.避免了多重条件的使用
fault:
    a.客户端必须知道理解所有的策略,算法,并自行决定使用哪一个策略类。
  b.会产生很多具体算法的策略实现类,可以使用享元模式来减少对象的数量。


 

热点排行