概述
ifelse是任何编程语言的重要组成部分。但是我们编写了大量嵌套的if语句,这使得我们的代码更加复杂和难以维护。
接下来,让我们探索如何简化代码的中的ifelse语句写法。
案例研究
我们经常遇到涉及很多条件的业务逻辑,并且每个逻辑都需要不同的处理方式。以Calculator类为例。我们将有一个方法,它接受两个数字和一个运算符作为输入,并根据操作返回结果:
我们也可以使用switch语句来实现它:
public int calculateUsingSwitch(int a, int b, String operator) { switch (operator) { case "add": result = a + b; break; // other cases } return result;}
在典型的开发中,if语句可能会变得更大,更复杂。此外,当存在复杂条件时,switch语句不适合。
拥有嵌套决策结构的另一个副作用是它们变得难以管理。例如,如果我们需要添加一个新的运算符,我们必须添加一个新的if语句并实现该操作。
重构
可以通过设计模式,来达到我们要的效果。
工厂模式
很多时候,我们遇到ifelse结构,最终在每个分支中执行类似的操作。这提供了提取工厂方法的机会,该工厂方法返回给定类型的对象并基于具体对象行为执行操作。
对于我们的示例,让我们定义一个具有单个apply方法的Operation接口:
public interface Operation { int apply(int a, int b);}
该方法将两个数字作为输入并返回结果。让我们定义一个用于执行添加的类:
public class Addition implements Operation { @Override public int apply(int a, int b) { return a + b; }}
我们现在将实现一个工厂类,它根据给定的运算符返回Operation的实例:
public class OperatorFactory { static Map operationMap = new HashMap<>(); static { operationMap.put("add