首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

优化你的if...else结构

最近在梳理支付逻辑,发现里面有很多需要优化的地方,本文主要聊一聊如何重构那些令人头秃的if...else。...目前项目代码就是这样,没出什么问题,但是如果后续接入京东支付、百度支付、云闪付等方式,那么就需要修改gotoPay方法的逻辑,新增新的if...else分支结构,进而导致逻辑越来越复杂。...Spring中存在一些内置事件,其实就是当完成某种操作时就会发出某些事件动作,通过监听这些动作,开发者就能定义实现不同的业务逻辑。...责任链模式在Spring框架中应用较为广泛,如FilterAOP就是典型的例子,这里笔者简化一下相关逻辑。...(key2)){ doSomething2(id); }else if(type.equals(key3)){ doSomething3(id); } 使用表驱动方法后,代码可优化为如下所示

40020

if else 优化 策略模式+工厂模式

if else 优化 策略模式+工厂模式 场景 在项目中有时候会遇到需要大量if else判断的时候,通常的if else 判断会造成代码整体不够优雅,可读性差, 可维护性差,且后续交给新手维护的时候可能会让人蒙圈...,因而会想到通过一种方法来对这种情况进行优化,提高 自己技术的同时也让自己参与的项目更便于维护,何乐而不为呢。...下面先看一下原始代码的写法,然后再提出优化后的代码,大家可以对比一下其中的不同 controller controller通过依赖注入调用dialogueLogV3Service.saveDialogueLog...//业务逻辑代码...... } return i; } 可以看到有很多if else 判断,并且后续每增加一种类型,这里就需要加一个else if 判断,后面开发这阅读起来单从方法行数上就有点蒙圈了...static T getAopProxy(T invoker) { return (T) AopContext.currentProxy(); } } 业务调用 优化后代码

9010

过多 if-else 分支的优化

我想谈一谈这个话题是因为我的上一篇博客在 ITEye 上有一些朋友回复,说 if-else 过多的分支可以使用 switch 或者责任链模式等等方式来优化。...为什么要优化? 你没有看错。这是要放在第一条谈论的。 有许多人会说,叠起来一堆 if-else 分支,代码就不优雅了。可是,怎样去定义 “优雅” 的概念呢?...反之,某一些精巧的设计,可能会带来可阅读性可理解性下降的问题。 寻找代替分支判断的方式 接下去我们再来考虑怎么样去重构优化过多的 if-else 分支。 程序逻辑最基本的组成就是分支、判断循环。...而过多 if-else 正是由于在某一个变化的点上,有许多判断条件结果分支造成的。所以最基本的解决办法就是把多个判断条件合成一个,也就是把若干个分支合成一个。...这些都不错,至少比那些老说用 switch 来代替 if-else 的有价值多了 :) 最后,对于如此小的一个问题,我要补充说明的一点是,看不得大片 if-else 看不得大片 new 关键字一样,我觉得这是许多

53210

Java | if-else代码优化方案

优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else⼲掉,使代码更加优雅。...80:100; 优化方案三:使用枚举 在某些时候,使⽤枚举也可以优化if-else逻辑分⽀,按个⼈理解,它也可以看作⼀种表驱动⽅法。...//有了枚举之后,以上if-else逻辑分⽀,可以优化为⼀⾏代码: String OrderStatusDes = OrderStatusEnum.0f(orderStatus).getDesc();...优化方案四:合并条件表达式 如果有⼀系列条件返回⼀样的结果,可以将它们合并为⼀个条件表达式,让逻辑更加清晰。...actionMappings.get(param).apply(someParams); 优化方案七:优化逻辑结构,让正常流程走主干 优化前: public double getAdjustedCapital

49620

利用策略模式优化过多 if else 代码

比如平时大家是否都会写类似这样的代码: if(a){ //dosomething }else if(b){ //doshomething }else if(c){ //doshomething...} else{ ////doshomething } 条件少还好,一旦 elseif 过多这里的逻辑将会比较混乱,并很容易出错。...刚开始条件较少,也就没管那么多直接写的;现在功能多了导致每次新增一个 else 条件我都得仔细核对,生怕影响之前的逻辑。...而之前所有的实现逻辑都单独抽取到其他实现类中。 这样每当我需要新增一个 else 逻辑,只需要新增一个类实现同一个接口便可完成。每个处理逻辑都互相独立互不干扰。...所以在之前的枚举中就维护了命令类类型的关系,只需要知道命令就能知道他的类类型。 这样才能满足只需要两行代码就能替换以前复杂的 ifelse,同时也能灵活扩展。

19510

利用策略模式优化过多 if else 代码

} 条件少还好,一旦 else if 过多这里的逻辑将会比较混乱,并很容易出错。...刚开始条件较少,也就没管那么多直接写的;现在功能多了导致每次新增一个 else 条件我都得仔细核对,生怕影响之前的逻辑。 这次终于忍无可忍就把他重构了,重构之后这里的结构如下: ?...而之前所有的实现逻辑都单独抽取到其他实现类中。 ? ? 这样每当我需要新增一个 else 逻辑,只需要新增一个类实现同一个接口便可完成。每个处理逻辑都互相独立互不干扰。 实现 ?...所以在之前的枚举中就维护了命令类类型的关系,只需要知道命令就能知道他的类类型。 这样才能满足只需要两行代码就能替换以前复杂的 if else,同时也能灵活扩展。...instance = innerCommandContext.getInstance(msg);instance.process(msg) ; 总结 当然还可以做的更灵活一些,比如都不需要显式的维护命令类类型的对应关系

1.1K20

利用策略模式优化过多 if else 代码

前言 平时大家是否都会写类似这样的代码: if(a){ //dosomething }else if(b){ //doshomething }else if(c){ //doshomething...} else{ ////doshomething } 条件少还好,一旦 elseif 过多这里的逻辑将会比较混乱,并很容易出错。...刚开始条件较少,也就没管那么多直接写的;现在功能多了导致每次新增一个 else 条件我都得仔细核对,生怕影响之前的逻辑。 这次终于忍无可忍就把他重构了,重构之后这里的结构如下: ?...而之前所有的实现逻辑都单独抽取到其他实现类中。 ? ? 这样每当我需要新增一个 else 逻辑,只需要新增一个类实现同一个接口便可完成。每个处理逻辑都互相独立互不干扰。 实现 ?...所以在之前的枚举中就维护了命令类类型的关系,只需要知道命令就能知道他的类类型。 这样才能满足只需要两行代码就能替换以前复杂的 ifelse,同时也能灵活扩展。

45040

你可以这样优化 if-else 代码结构

前言 最近部门在对以往的代码做一些优化,我在代码中看到一连串的 if(){}elseif(){} 的逻辑判断。这明显是有优化空间的。...由于内部代码不适合分享,这里我就用 来讲讲逻辑判断优化的一些方案。 这里先声明,免有人疑惑: 我们在项目中使用的很可能会有多层的嵌套,不像我的例子只有一层。...优化过程 这里我简单的分为 “初学 —> 入门 —> 中级” 这几个阶段。 初学 当我们开始拿到需求的时候,看到一系列的逻辑判断,首先想到的应该就是 if 语句了。...if (date === 1) { string += "一"; } else if (date === 2) { string += "二"; } else if (date...逻辑与运算符 有些时候我们可以使用逻辑与运算符来简化代码 if( falg ){ someMethod() } 可以改成: falg && someMethod(); 使用

42710

优化if-else代码的八种方案

前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。...优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。...优化前: if (condition) { //doSomething } else { return; } 优化后: if(!...80 : 100; 优化方案三:使用枚举 在某些时候,使用枚举也可以优化if-else逻辑分支,按个人理解,它也可以看作一种表驱动方法。...actionMappings.get(param).apply(someParams); 优化方案七:优化逻辑结构,让正常流程走主干 优化前: public double getAdjustedCapital

62520
领券