使用策略模式彻底消除if-else
文章目录
- 使用策略模式彻底消除if-else
- 1. 场景描述
- 2. if-else方式
- 3. 策略模式
使用策略模式彻底消除if-else
如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现,这样会显得代码逻辑很臃肿,那么有没有方式去消除这种逻辑呢?答案当然是有,那就是使用策略模式
1. 场景描述
接下来我们演示一下根据传入的不同参数执行不同的计算功能:
- 如果传入的是PLUS,执行数据a+b计算;
- 如果传入的是MINUS,执行数据a-b计算;
- 如果传入的是MULTIPLY,执行数据a*b计算;
- 否则执行数据a/b计算。
2. if-else方式
public class StrategyDemo {
public static void main(String[] args) {
Integer result = count(3, 5, "MULTIPLY");
System.out.println(result);
}
public static Integer count(Integer a, Integer b, String opt) {
if ("PLUS".equals(opt)) {
return a + b;
} else if ("MINUS".equals(opt)){
return a - b;
} else if ("MULTIPLY".equals(opt)) {
return a * b;
} else {
return a / b;
}
}
}
3. 策略模式
定义计算接口
public interface ArithmeticOperation {
/**
* 计算
*
* @param a 待计算值
* @param b 待计算值
* @return 计算结果
*/
int calculate(int a, int b);
}
定义枚举类并实现计算接口
public enum ArithmeticEnum implements ArithmeticOperation{
/**
* 加
*/
PLUS {
@Override
public int calculate(int a, int b) {
return a + b;
}
},
/**
* 减
*/
MINUS {
@Override
public int calculate(int a, int b) {
return a - b;
}
},
/**
* 乘
*/
MULTIPLY {
@Override
public int calculate(int a, int b) {
return a * b;
}
},
/**
* 除
*/
DIVIDE {
@Override
public int calculate(int a, int b) {
return a / b;
}
};
}
使用
public class StrategyDemo {
public static void main(String[] args) {
Integer result = count(3, 5, "MULTIPLY");
System.out.println(result);
}
public static Integer count(Integer a, Integer b, String opt) {
ArithmeticEnum arithmeticEnum = ArithmeticEnum.valueOf(opt);
return arithmeticEnum.calculate(a, b);
}
}
测试运行结果: