代码改变世界

策略模式(Strategy)

2015-08-26 09:41  你吃不吃麦芽糖  阅读(212)  评论(0)    收藏  举报

策略模式是对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立地类中,从而使得它们可以自由的相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

策略模式是对算法的包装,是把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:准备一组算法,并将每一个算法封装起来,使得它们可以互换。

下面给出一个策略模式最小的实现,首先给出这个实现中涉及到的三个角色:

  • 环境(Context)角色:持有一个Strategy类的引用。
  • 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或者抽象类实现。此角色给出所有的具体策略类所需要的接口。
  • 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。

下面是具体的代码:

/**
 * 环境角色.
 */
public class Context
{
    private Strategy strategy;
    /*
    * 策略方法
    * */
    public void contextInterface()
    {
        this.strategy.strategyInterface();
    }
 }

 

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

 

/**
 * 具体策略角色.
 */
public class ConcreteStrategy extends Strategy
{
    @Override
    public void strategyInterface() {

    }
}

 策略模式很容易理解