主页 > 开源代码  > 

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

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

文章目录 使用策略模式彻底消除if-else1. 场景描述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); } }

测试运行结果:

标签:

使用策略模式彻底消除if-else由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“使用策略模式彻底消除if-else