ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

使用策略模式彻底消除if-else

使用策略模式彻底消除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 {@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);}
}

测试运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

返回列表