策略模式示例代码(二)

例子来源:《设计模式之禅》——第18章 策略模式
策略模式
Context封装角色Strategy抽象策略角色ConcreteStrateg具体策略角色

Strategy

public interface Strategy {
    void doSomething();
}

ConcreteStrategyA

public class ConcreteStrategyA implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略A的运算法则");
    }
}

ConcreteStrategyB

public class ConcrteteStrategyB implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略2的运算法则");
    }
}

Context

public class Context {
    private Strategy  strategy = null;

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

    public void doAnything(){
        this.strategy.doSomething();
    }
}

Client

public class Client {
    public static void main(String[] args) {
        int a = Integer.parseInt(args[0]);
        String symbol = args[1];
        int b = Integer.parseInt(args[2]);
        System.out.println("输入的参数为:" + Arrays.toString(args));
        System.out.println("运行结果为:" + a + symbol + b + "=" + Calculator.ADD.exec(a, b));
    }
}

策略模式的优点

  • 算法可以自由切换
  • 避免使用多重条件判断
  • 扩展型良好

策略模式的缺点

  • 策略类数量增多
  • 所有的策略类都需要对外暴露

猜你喜欢

转载自blog.csdn.net/qq_33704186/article/details/87918309
今日推荐