package com.jaeson.javastudy.designpattern;
/**
* 策略模式属于对象的行为模式。
* 其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
* 策略模式使得算法可以在不影响到客户端的情况下发生变化。
*
*/
public class StrategyPattern {
private ICalculator strategy;
public StrategyPattern(ICalculator strategy) {
this.strategy = strategy;
}
public int cal(int i, int j) {
return this.strategy.calculate(i, j);
}
public void setStrategy(ICalculator strategy) {
this.strategy = strategy;
}
public static void main(String[] args) {
StrategyPattern st = new StrategyPattern(new Plus());
System.out.println(st.cal(1, 10));
st.setStrategy(new Minus());
System.out.println(st.cal(1, 10));
st.setStrategy(new Multi());
System.out.println(st.cal(1, 10));
st.setStrategy(new Devide());
System.out.println(st.cal(1, 10));
}
}
class Plus implements ICalculator {
@Override public int calculate(int i, int j) {
return i + j;
}
}
class Minus implements ICalculator {
@Override public int calculate(int i, int j) {
return i - j;
}
}
class Multi implements ICalculator {
@Override public int calculate(int i, int j) {
return i * j;
}
}
class Devide implements ICalculator {
@Override public int calculate(int i, int j) {
return i / j;
}
}