重构技术就是以微小的步伐修改程序。重构有风险,修改需谨慎。修改越多,出错越多,重构必须系统化进行。
何时要消除代码中的 if-else:
- 可读性差
- 扩展性不强,违反单一职责原则,开闭原则。
不符合SOLID原则中的”开闭原则“ ——对扩展开放,对更改封闭。每次都需要修改原有代码(对更改没有封闭),不断的添加”if else"。
有以下十种方法来消除代码中的 if-else 语句:
- 1、卫语句
- 2、使用 SWTICH CASE 语句
- 3、提炼方法
- 4、表驱动(事件委托处理模型)
- 5、策略模式(可结合注解驱动)
- 6、责任链模式
- 7、状态机
1、卫语句
优点:增强了代码的可读性。但是扩展性不强。
- 场景1:比如,条件比较多
改进前:
if (condition1) {
} else if (condition2) {
} else if (condition3) {
} else if (condition4) {
} else {
}
改进后:
if (condition1)
return;
if (condition2)
return;
if (condition3)
return
return;
- 场景2:if-else 语句嵌套较深
使用卫语句替换嵌套条件
改进前:
if (condition1) {
if (condition2) {
if (condition3){
}
} else (condition4) {
}
} else if (condition5) {
}
改进后:
if (condition1 && condition2 && condition3) {
return
}
if (condition1 && condition2) {
reuturn
}
if (condition1 && condition4) {
return
}
if (condition5) {
return
}
return;
或者提炼方法:
if (condition1) {
methodOne();
} else if (condition5) {
}
2、增强扩展性
见下一篇:
- 《我有N种方法消除 if-else,而你却无可奈何(第二篇:增强可扩展性)》
参考文献
[1]《重构》
[2] 消除 if-else:
https://www.cnblogs.com/aligege/p/12145889.html
https://blog.csdn.net/iteye_19045/article/details/103300731