文章目录
- 使用策略模式彻底消除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 {@Overridepublic int calculate(int a, int b) {return a + b;}},/*** 减*/MINUS {@Overridepublic int calculate(int a, int b) {return a - b;}},/*** 乘*/MULTIPLY {@Overridepublic int calculate(int a, int b) {return a * b;}},/*** 除*/DIVIDE {@Overridepublic 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);}
}
测试运行结果: