美文网首页
10.策略模式

10.策略模式

作者: 0x70e8 | 来源:发表于2018-03-20 20:02 被阅读0次

1.是什么

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

2.有什么用

优点:

  • 提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。
  • 避免程序中使用多重条件转移语句,使系统更灵活,易于扩展。

缺点:

  • 一个策略对应一个类,太多策略会造成类太多

3.怎么用

  • 通用类图


    strategy.PNG
示例代码
  • 策略接口
public interface IStrategy {

    public void handle();
}

  • 策略实现类
public class FightStrategy implements IStrategy {

    @Override
    public void handle() {
        System.out.println("fight!");

    }

}

public class EscapeStrategy implements IStrategy {

    @Override
    public void handle() {
        System.out.println("逃跑……");

    }

}

  • 环境类
public class Context {

    private IStrategy strategy;

    public void handleProblem() {
        this.strategy.handle();
    }

    /**
     * @return the strategy
     */
    public IStrategy getStrategy() {
        return strategy;
    }

    /**
     * @param strategy
     *            the strategy to set
     */
    public void setStrategy(IStrategy strategy) {
        this.strategy = strategy;
    }

}

  • client类
public class Client {
    public static void main(String[] args) {
        // 当前环境来决定使用什么策略应对
        Context env = new Context();
        System.out.println("困难出现");
        System.out.println("想想应对策略");
        IStrategy fightstrategy = new FightStrategy();
        System.out.println("想好策略");
        env.setStrategy(fightstrategy);
        System.out.println("应对问题");
        env.handleProblem();

        System.out.println("困难又出现");
        System.out.println("想想应对策略");
        IStrategy escape = new EscapeStrategy();
        System.out.println("想好策略");
        env.setStrategy(escape);
        System.out.println("应对问题");
        env.handleProblem();
    }
}

相关文章

网友评论

      本文标题:10.策略模式

      本文链接:https://www.haomeiwen.com/subject/wkfiqftx.html