【高质量代码系列2】switch 语句重构技巧总结

switch 语句在日常开发中,常常用来根据不同的类型,执行不同的操作。如果类型很多,整个swtich代码会变得很臃肿,代码可扩展性、可阅读性都很差。针对这个问题,我们可以考虑使用多态来解决,将每个类型的行为封装到一个子类中。
下面以加减等计算类型的操作为例说明这个问题

public enum CalculateType {

ADD("add","加法"),SUB("sub","减法"),MUL("mul","乘法");

private String type;

private String desc;

CalculateType(String type,String desc) {
this.type = type;
this.desc = desc;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}
}


public class Calculate {

public int calculate(int a, int b,CalculateType type) {
switch (type) {
case ADD:
return a + b;
case MUL:
return a * b;
case SUB:
return a - b;
default:
throw new UnsupportedOperationException("不支持的计算类型");
}
}
}
calculate()方法利用switch语句这样的写法,后面一旦不断新增计算类型,代码就会变得越来越庞大。我们可以把加、减、乘三种算法独立成一个类,将具体的计算方法封装到类中。

public interface NumCalculate {

int calculate(int a, int b);
}

public class AddCalculate implements NumCalculate{

@Override
public int calculate(int a, int b) {
return a + b;
}
}

public class MulCalculate implements NumCalculate {

@Override
public int calculate(int a, int b) {
return a * b;
}
}

public class SubCalculate implements NumCalculate {

@Override
public int calculate(int a, int b) {
return a - b;
}
}
这样当我们需要某项计算时,直接调用对应类的方法就可以了。
下面的问题就是如何获取对象,我们可以考虑使用反射根据类名来获取对象。

public class Calculate {

public static NumCalculate newInstance(String className) {
try {
Class action = Class.forName(className);
NumCalculate calculate = (NumCalculate) action.newInstance();
return calculate;
} catch (Exception e) {
return null;
}
}

public static void main(String[] args) throws Exception {

NumCalculate calculate = newInstance(AddCalculate.class.getName());
int result = calculate.calculate(1, 2);
System.out.printf(String.valueOf(result));
}

}
这样当我们需要进行某种类型的计算时,只需知道对应的类名就可以获取对象,进而执行计算,完全不再需要swtich语句。

其实在我们的实际开发中,常常会遇到switch的应用,如果类型很多,代码很容易变得臃肿不堪,可考虑这种方式来重构!
————————————————
原文链接:https://blog.csdn.net/song19890528/article/details/79722769

版权属于: sbboke版权所有。

转载时必须以链接形式注明作者和原始出处及本声明。

张贴在生活杂烩标签:

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论