if-else代码优化的八种方案
作者:Jay_huaxiao来源:掘金 链接:https://juejin.im/post/5e5fa79de51d45271849e7bd
前言
代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介7 [ m k H N r {绍优化if-else代码的八种方案。
优化方案一:提前return,去除不s o [ % d h S },\"c V U 3 3 / K J h订单已支付\"),SENDZ e F M XED(2,\"已发货\"),;
private int index;
private String desc;
public int getIndex() {
return index;
}
public String getDesc() {
ret1 M i Ws)});
// 省略多余逻辑语句
actionMappings.get(O ; - Q , i x kparam).apply(someParams);优化方案七:优化逻辑结构,让正常流程M k B走主Z % . 2 C Q F :干
优化前H 7 e:
public double getAdjustedC; } @ 1 : fapital(){8 J M
if(_capital <= 0.0 ){
return 0.0;
}
if(_intRate >x V ` f + & 2 0 && _duO O J v k i n Y drat7 8 ~ L F H @ ^ion >0){
return (_income / _8 _ : -duration) *ADJ_FACTOR;
}
return 0.0;
}优化后:
public double getAdjustedCapital(){
if(_capital <= 0.0 ){
return 0.0;
}
if(_intRate <= 0 || _duration <=L y { p ! 0){
return 0.0;
}
retuS @ zrn (_income / _duration) *ADJ_FACTOR;
}将条件反转使异常情r F W 1 b i 6 3况先退出,让正常流程维持在c 8 y * ` H 1主干流程,可以让代码结构更加清晰。
优化方案八:3 8 Y ( ( u - 8策略模式+工厂方法消除if else
假设需求为,根据不同勋章类型n U z,处理相对应的勋* u {章服务,优化前有以下代码:
String medalType = \"guest\";
if (\"guest\".equal3 u | { Us(medalType)) {
System.out.println(\"嘉宾勋章\");
} else if (\"vip\".equals(medalType)) {
System.out.p, S b ] 1 w ) &rintln(\"会员勋章\");
} else if (\"guard\".equals(medab ( P 1 % vlTR V z bype)) v | V H , F / {
System.out.println(\"展示守护勋章\");
}
...首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,可以得出以下代码:
//勋章接口
public interface IMedalService {
void showMed} 3 e : U Z lal();
}我们根据每个% B T } ? d b逻辑条件,定义相对应的策略实现类,可得以下代码:
//守护勋章策略实现类
public class GuardMedalServiceImpl implements IMedalService {
@Override
public void shd Q . b E s l & TowMedal() {
System.out.println(\"展示守护勋章\");
}
}
//嘉宾勋章策略实现类
public class GuestMedalServiceImpl implements IMedalService {
@Override
public void showMedal() {
System.ou! m @ p p h ?t.println(\"嘉宾勋章\");
}M Y , ; Dlic static IMedalService getMedalService(String medalType) {
return map.geW ! E z n &t(medalType);
}
}使用了. Q 7 & o T 9 T d策略+工厂模式之后o V 7,代码变得简洁多了,如下:
public class Test {
public static void main(String args) {
String me# F l ]dalType = \"guest\";
IMedalService medalService = MedalSE S g U W w % = 5ervicesFactory.getMedalService(medalType);
medalService.showMedal();
}
}