优化方案一:提前返回,去掉多余的else如果if-else代码块中包含return语句,可以考虑提前返回,去掉多余的else,让代码更优雅。优化前:if(condition){//doSomething}else{return;}优化后:if(!condition){return;}//doSomething优化方案2:使用条件三元运算符使用条件三元运算符可以简化一些if-else,使代码更简洁,更具可读性。优化前:intprice;if(condition){price=80;}else{price=100;}优化后:intprice=condition?80:100;优化方案三:使用枚举在某些时候,也可以使用枚举优化if-else逻辑分支,根据个人理解,也可以看成是表驱动的方法。优化前:StringOrderStatusDes;if(orderStatus==0){OrderStatusDes="订单未支付";}elseif(OrderStatus==1){OrderStatusDes="订单已支付";}elseif(OrderStatus==2){OrderStatusDes="Shipped";}...优化后:(首先定义一个枚举)publicenumOrderStatusEnum{UN_PAID(0,"订单未支付"),PAIDED(1,"订单已支付"),SENDED(2,"已发送商品"),;privateintindex;privateStringdesc;publicintgetIndex(){returnindex;}publicStringgetDesc(){returndesc;}OrderStatusEnum(intindex,Stringdesc){this.index=index;this.desc=desc;}OrderStatusEnumof(inorderStatus){for(OrderStatusEnumtemp:OrderStatusEnum.values()){if(temp.getIndex()==orderStatus){returntemp;}}returnnull;}}经过枚举,上述if-else逻辑分支可以优化为一个代码行:StringOrderStatusDes=OrderStatusEnum.0f(orderStatus).getDesc();优化方案四:合并条件表达式如果有一系列返回相同结果的条件,可以将它们合并为一个条件表达式,使逻辑更清晰。优化前:doublegetVipDiscount(){if(age<18){return0.8;}if("Shenzhen".equals(city)){return0.8;}if(isStudent){return0.8;}//dosomethig}优化后:doublegetVipDiscount(){if(age<18||"Shenzhen".equals(city)||isStudent){return0.8;}//doSomthing}优化方案5:使用Optional时有时if-else较多,是非空判断造成的。这时候可以使用java8的Optional进行优化。优化前:Stringstr="jay@huaxiao";if(str!=null){System.out.println(str);}else{System.out.println("Null");}优化后:OptionalstrOptional=Optional.of("jay@huaxiao");strOptional.ifPresentOrElse(System.out::println,()->System.out.println("Null"));优化方案六:table-drivenmethodtable-drivenmethod,也称为table-driven,table-drivenapproach。表驱动方法是一种允许您在表中查找信息而无需使用大量逻辑(if或case)来查找它们的方法。下面的demo将地图抽象成表格,在地图中搜索信息,没有多余的逻辑语句。优化前:if(param.equals(value1)){doAction1(someParams);}elseif(param.equals(value2)){doAction2(someParams);}elseif(param.equals(value3)){doAction3(someParams);}//...优化后:Map,Function>action>actionMappings=newHashMap<>();//这里的泛型?是为了演示方便,其实可以换成自己需要的类型//初始化actionMappings.put(value1,(someParams)->{doAction1(someParams)});actionMappings.put(value2,(someParams)->{doAction2(someParams)});actionMappings.put(value3,(someParams)->{doAction3(someParams)});//省略冗余逻辑语句actionMappings.get(param).apply(someParams);优化方案7:优化逻辑结构,让正常流程走主干优化前:publicdoublegetAdjustedCapital(){if(_capital<=0.0){return0.0;}if(_intRate>0&&_duration>0){return(_income/_duration)*ADJ_FACTOR;}return0.0;}优化后:publicdoublegetAdjustedCapital(){if(_capital<=0.0){return0.0;}if(_intRate<=0||_duration<=0){return0.0;}return(_income/_duration)*ADJ_FACTOR;}反转条件使异常情况先退出,这样才能维持正常流程主流程,可以使代码结构更加清晰。优化方案八:Strategy模式+工厂方法消除ifelse假设需求是根据不同的勋章类型处理相应的勋章服务。优化前有如下代码:StringmedalType="guest";if("guest".equals(medalType)){System.out.println("GuestMedal");}elseif("vip".equals(medalType)){System.out.println("MemberMedal");}elseif("guard".equals(medalType)){System.out.println("ShowGuardianMedal");}...首先,我们抽象每个条件逻辑代码块放到一个公共接口中,可以得到如下代码://勋章接口publicinterfaceIMedalService{voidshowMedal();}我们根据每个逻辑条件定义对应的策略实现类,可以得到如下代码://守护者勋章策略实现类publicclassGuardMedalServiceImplimplementsIMedalService{@OverridepublicvoidshowMedal(){System.out.println("显示守护者勋章");}}//贵宾勋章策略实现类publicclassGuestMedalServiceImplimplementsIMedalService{@OverridepublicvoidshowMedal(){System.out.println("贵宾勋章");}}//贵宾勋章策略实现类publicclassVipMedalServiceImplimplementsIMedalService{@OverridepublicvoidshowMedal(){System.out.println("会员勋章");}}接下来我们定义一个策略工厂类来管理这些勋章并实现策略类,如下://勋章服务行业类publicclassMedalServicesFactory{privatestaticfinalMapmap=newHashMap<>();static{map.put("guard",newGuardMedalServiceImpl());map.put("vip",newVipMedalServiceImpl());map.put("guest",newGuestMedalServiceImpl());}publicstaticIMedalServicegetMedalService(StringmedalType){returnmap.get(medalType);}}使用策略+工厂模式后,代码变得简洁多了,如下:publicclassTest{publicstaticvoidmain(String[]args){StringmedalType="客人";IMedalServicemedalService=MedalServicesFactory.getMedalService(medalType);medalService.showMedal();}}