问题一:if…else 过多
问题表现
if…else 过多的代码可以抽象为下面这段代码。其中只列出5个逻辑分支,但实际工作中,能见到一个方法包含10个、20个甚至更多的逻辑分支的情况。另外,if…else 过多通常会伴随着另两个问题:逻辑表达式复杂和 if…else 嵌套过深。
if (condition1) {
if(cod){
}else if(cod2){
if(cod){
}else if(cod2){
if(cod){
}else if(cod2){
}
}
}
} else if (condition2) {
} else if (condition3) {
} else if (condition4) {
} else {
}
通常,if…else 过多的方法,通常可读性和可扩展性都不好。从软件设计角度讲,代码中存在过多的 if…else 往往意味着这段代码违反了违反单一职责原则和开闭原则。而解决 if…else 过多问题的最大意义,往往就在于提高代码的可扩展性。
1.表驱动
适用场景
逻辑表达模式固定的 if…else
这种表驱动有点偏向于策略的切换
自定义 传入固定的参数K,固定的返回值V
String strX = "";
int t = 3;
if (t==1){
System.out.println("第一种");
}else if (t==2){
System.out.println("第二种");
}else if (t==3){
System.out.println("第三种");
}
重构为
public static void main(String[] args) {
//hash表 驱动
Map<String, Function<Integer,?>> actionMap = new HashMap<>();
//表中放入lamda
actionMap.put("t", (x) -> start(x));
actionMap.put("", (x) -> start2(x));
//直接调用固定 的返回固定的
actionMap.get(strX).apply(t);
}
public static <T> T start(T t){return t;}
public static <T> T start2(T t){return t;}