策略模式(Strategy)

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

策略模式(Strategy)


    模板可以是这样的:
上下文角色:
    
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.会产生很多具体算法的策略实现类,可以使用享元模式来减少对象的数量。


 

策略模式(Strategy)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论