Java23种设计模式
策略模式把所研究的对象的算法包装在不同的策略对象里,策略对象改变计算的结果也会发生改变。
需求:分别打印出10+5、10-5、10*5、10/5的值。
- 首先创建策略接口,内部一个计算方法。
public interface Strategy {
int calculation(int num1,int num2);
}
- 创建加减乘除策略类
public class StrategyAdd implements Strategy {
@Override
public int calculation(int num1, int num2) {
return num1+num2;
}
}
public class StrategySub implements Strategy{
@Override
public int calculation(int num1, int num2) {
return num1-num2;
}
}
public class StrategyMul implements Strategy{
@Override
public int calculation(int num1, int num2) {
return num1*num2;
}
}
public class StrategyDiv implements Strategy{
@Override
public int calculation(int num1, int num2) {
return num1/num2;
}
}
- 创建Context类
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int getNum(int num1,int num2){
return strategy.calculation(num1,num2);
}
}
- 分别给Context传不同的策略,然后打印结果
public class Test {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new StrategyAdd());
System.out.print("10+5="+context.getNum(10,5)+"\n");
context.setStrategy(new StrategySub());
System.out.print("10-5="+context.getNum(10,5)+"\n");
context.setStrategy(new StrategyMul());
System.out.print("10*5="+context.getNum(10,5)+"\n");
context.setStrategy(new StrategyDiv());
System.out.print("10/5="+context.getNum(10,5)+"\n");
}
}
打印结果为:
10+5=15
10-5=5
10*5=50
10/5=2
策略模式和状态模式的区别是:
状态模式是对象的状态改变了,绑定的状态对象也跟着改变而影响结果,状态对象具备显示结果能力。
策略模式是对象的策略算法发生改变,绑定的策略对象也跟着改变,策略对象不具备显示结果能力。