文档章节

关于优化冗余的多个if-else代码

 会飞的小笨猪
发布于 2017/09/08 15:33
字数 547
阅读 100
收藏 1

最近接到一个开发任务整改,为了适应新接口,对某个功能进行改造。这个功能主要是跟外围系统进行交互,接收到请求报文后,解析报文然后根据报文中的不同指令进行处理,一共是有8个指令,每个指令的业务含义都是不相同的。之前的旧代码是写了8个if-else,看着就头疼,代码不仅冗余,并且难以维护,旺旺要修改某个东西,需要翻多页代码。 旧代码

if(condition1){

}else if(condition2){

} .... 一共有8个这样的指令判断处理,如果以后增加指令的话,只能继续添加if-else ,这样不符合java的开闭原则,现在考虑将它优化。优化的时候也想过多种方法,包括状态模式,责任链模式等等,发现这些都行不通,最后发现了一种较方便轻巧的方法。具体思路以及代码如下所示:

建一个通用处理的接口,用来处理报文的信息并返回结果 public interface MileageBankHandler { /** * * @param revDto 传来的参数 * @return RepDto 返回的报文 */ RepDto executeMileageBankReport(RevDto revDto); } 根据不同的指令分新建实现类,都实现这个接口。例如A指令:

@Service public class Ahandler implements MileageBankHandler{ } @Service public class Bhandler implements MileageBankHandler{ } .... @Service public class Ghandler implements MileageBankHandler{ } 这样子,每个实现类只关注自己的逻辑部分,以后有改动,只需要到特定的实现类修改就好。假如新增了一个指令,那么就新建一个子类,而不会影响别的指令的逻辑。这样子的好处是方便维护而且符合java的开闭原则,同时是面向接口变成,多态的体现。

这个时候在调用指令的时候,只需要配置好这些指令,可以使用注入Map的方式。

@Autowired private Map<String,MileageBankHandler> handlerMap ; Key存放的是指令名称,Value存放的是对应的beanId; 经过这样子的改造后,现在的代码不仅优雅,而且更加好维护。

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 1
码字总数 547
作品 0
广州
私信 提问
Python装饰器

Life is short, you need Python 最近在开发公司内部的一个性能网站,网站是diango+mongodb架设的,部分功能已经被其他同事实现,但某些地方的代码冗余太多,一点都不符合"生命苦短,快用Pyt...

小草凡
2017/10/24
0
0
Java开发者福利——Java编码规范Eclipse/IDEA插件(附编码规范考题,测试你的掌握程度)

开发同学在团队协作过程中都踩过不少坑,其中不同的编码风格是很大的一种原因。 一个团队中,如果大家都不按照约定来编码,那么最终项目维护起来将会非常痛苦。你看别人的代码想摔鼠标,也许...

云大学小编
2017/12/04
0
0
提升市场竞争力,这些细节你都把握了吗?

版权声明:本文所有文章均为原创,原文链接:blog.uwa4d.com,如需转载请联系support@uwa4d.com https://blog.csdn.net/UWA4D/article/details/83346503 优化工作向来是个复杂系统的工程,且...

UWA
2018/10/24
0
0
字节码执行方式--解释执行和JIT

此文已由作者赵计刚薪授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 1、两种执行方式: 解释执行(运行期解释字节码并执行) 编译为机器码执行(将字节码编译为...

网易云
2018/12/07
0
0
Android使用Lambda表达式

做Android开发的都知道,Android代码毋庸置疑是代码比较大,甚至有的地方表达是冗余的。那么Lambda前来报道,给你的代码量减减负,让你的代码看起来更加简洁,给你蓬乱的长发理个板寸。 什么...

翻滚吧李博
2017/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何限制用户仅通过HTTPS方式访问OSS?

一、当前存在的问题 当前OSS支持用户使用HTTPS/HTTP协议访问Bucket。但由于HTTP存在安全漏洞。大型企业客户都要求使用HTTPS方式访问OSS,并且拒绝HTTP访问请求。 目前OSS可以通过RAM policy方...

阿里云官方博客
23分钟前
2
0
详解深度学习之经典网络架构——LeNet

一、基本简介 LeNet-5出自论文Gradient-Based Learning Applied to Document Recognition,是一种用于手写体字符识别的非常高效的卷积神经网络。 二、LeNet网络的基本结构 LeNet5 这个网络虽...

AI女神
26分钟前
3
0
日志服务Python消费组实战(二):实时分发数据

场景目标 使用日志服务的Web-tracking、logtail(文件极简)、syslog等收集上来的日志经常存在各种各样的格式,我们需要针对特定的日志(例如topic)进行一定的分发到特定的logstore中处理和...

阿里云云栖社区
26分钟前
3
0
LVM 增加磁盘扩容

sudo parted /dev/sdeparted> mklabel gptparted> mkpart primary lvm ext4 %0 %100parted> printsudo lvmlvm> pvcreate /dev/sde1lvm> vgextend vg-data /dev/sde1lvm> lve......

仪山湖
30分钟前
1
0
Linux挂载本地iso镜像,不联网使用yum命令

上传iso镜像文件到/mnt 目录下 在/mnt目录下创建Server目录 mkdir Server 备份 /etc/yum.repos.d/目录下的repo文件 cd /etc/yum.repos.dmkdir repobakmv *.repo repobak/ 挂载本地iso文件...

AustinYe
31分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部