设计模式-策略模式

策略模式分析

针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。

类图示例
设计模式-策略模式
代码示例

//策略模式
public class StrategyModule {

    public interface Strategy{
        int doOperation(int num1 ,int num2);
    }

    static class OperationAdd implements Strategy{

        @Override
        public int doOperation(int num1, int num2) {
            return num1 + num2;
        }
    }

    static class OperationSubstract implements Strategy{

        @Override
        public int doOperation(int num1, int num2) {
            return num1- num2;
        }
    }

    static class OperationMultiply implements Strategy{

        @Override
        public int doOperation(int num1, int num2) {
            return num1 * num2;
        }
    }

    static class Context{
        private Strategy strategy;
        public Context(Strategy strategy) {
            this.strategy = strategy;
        }

        public int executeStrategy(int num1, int num2){
            return strategy.doOperation(num1, num2);
        }
    }

    public static void main(String[] args) {
        Context context = new Context(new OperationAdd());
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationSubstract());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationMultiply());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}

优点:

  1. 算法可以自由切换。
  2. 避免使用多重条件判断。
  3. 扩展性良好。

缺点:

  1. 策略类会增多。
  2. 所有策略类都需要对外暴露。