文档章节

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

 会飞的小笨猪
发布于 2017/09/08 15:33
字数 547
阅读 94
收藏 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
Android使用Lambda表达式

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

翻滚吧李博
2017/12/27
0
0
提升市场竞争力,这些细节你都把握了吗?

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

UWA
10/24
0
0
J-Focus 0.4.0 发布,JS动画应用框架

本次更新内容包括: 1、调整框架结构组成,由原来的一个文件划分成多个文件组成。其中各个划分出来的文件由其功能决定。例如jfocus.system.tween.js则包含所有与过渡动画相关功能。更加方便了...

vimfung
2012/08/19
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
49分钟前
1
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
1
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
1
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
1
0
Android SELinux avc dennied权限问题解决方法

1. 概述 SELinux是Google从android 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。 然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“...

TreasureWe
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部