策略模式——行为模式

100 阅读1分钟

1.白话文定义

针对不同场景的算法,将每个算法都封装到具有共同接口的独立类中。策略模式可以使得算法在不影响客户端的情况下自己选择对应策略。 前提客户端必须提前知道总共有多少种策略。

2.角色

1.Context上下文环境类:负责持有IStrategy的引用;

2.抽象策略类:通常是一个接口或抽象类,负责定义策略执行的方法;

3.策略实现类:具体的策略实现类,负责执行具体的方法;

4.客户端调用类。

3.类图

image.png

4.代码实现

  • 策略接口
public interface IStrategy {
    
    /**
     * @desc 策略方法
     */
    void doOperator();
}
  • 策略实现类A
public class StrategyAImpl implements IStrategy{
    @Override
    public void doOperator() {
        System.out.println("strategyA doOperator");
    }
}
  • 策略实现类B
public class StrategyBImpl implements IStrategy {
    @Override
    public void doOperator() {
        System.out.println("strategyB doOperator");
    }
}
  • 环境上下类
ublic class Context {


    private IStrategy iStrategy;

    public Context(IStrategy iStrategy) {
        this.iStrategy = iStrategy;
    }

    public void doOperator() {
        iStrategy.doOperator();
    }
}
  • 客户调用类
public class Main {
    
    public static void main(String[] args) {

        Context context = new Context(new StrategyAImpl());

        context.doOperator();
    }
}
  • 测试结果

image.png

5.优点

可以避免使用多重(if-else)条件语句。

6.缺点

1.客户端必须知道所有的策略情况,并自行决定使用哪种策略;

2.由于每个策略类都被封装成独立类,如果备选的策略很多,容易造成类爆炸。