文档章节

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

 会飞的小笨猪
发布于 2017/09/08 15:33
字数 547
阅读 26
收藏 1
点赞 0
评论 0

最近接到一个开发任务整改,为了适应新接口,对某个功能进行改造。这个功能主要是跟外围系统进行交互,接收到请求报文后,解析报文然后根据报文中的不同指令进行处理,一共是有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

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

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

云大学小编 ⋅ 2017/12/04 ⋅ 0

J-Focus 0.4.0 发布,JS动画应用框架

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

vimfung ⋅ 2012/08/19 ⋅ 0

数据库优化

本文首先讨论了基于第三范式的数据库表的基本设计,着重论述了建立主键和索引的策略和方案,然后从数据库表的扩展设计和库表对象的放置等角度概述了数据库管理系统的优化方案。 关键词: 优化...

battier ⋅ 2011/11/15 ⋅ 0

网站架构的目标、评价指标及实现方法和工具

架构要素 1. 性能  评价指标: 响应时间 TPS (1) 系统吞吐量(TPS每秒事物数、HPS每秒HTTP请求数、QPS每秒查询数)(2) 并发处理能力(3) 性能计数器(SystemLoad、对象与线程数、内存使用、C...

jedi_knight ⋅ 2015/10/16 ⋅ 0

关于重构的一些想法

引言:有时候重构是为了提高代码的执行效率。有时候重构是为了提高代码的可读性。有时候重构是为了少写代码。 方法 把功能相对独立的内容,拆分出来,变成一个函数。最好要功能灵活一点。不要...

桃子红了呐 ⋅ 2017/03/26 ⋅ 0

实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎。 柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统。 前言: 在上篇《如何选择纠删码编码引擎...

七仙女很忙 ⋅ 2017/05/24 ⋅ 0

前端优化带来的思考,浅谈前端工程化

重复优化的思考 这段时间对项目做了一次整体的优化,全站有了20%左右的提升(本来载入速度已经1.2S左右了,优化度很低),算一算已经做了四轮的全站性能优化了,回顾几次的优化手段,基本上几...

范大脚脚 ⋅ 2017/10/19 ⋅ 0

JS动画应用框架--J-Focus

J-Focus (JFocus) 是一个Javascript脚本实现的动画应用框架,用于快速地开发基于动画效果的Web应用。其特点如下: 各种过渡动画的快速实现 与ActionScript3有着相似的类型结构,让ActionScr...

vimfung ⋅ 2012/05/19 ⋅ 11

前端优化带来的思考,浅谈前端工程化

这段时间对项目做了一次整体的优化,全站有了20%左右的提升(本来载入速度已经1.2S左右了,优化度很低),算一算已经做了四轮的全站性能优化了,回顾几次的优化手段,基本上几个字就能说清楚...

范大脚脚 ⋅ 2017/11/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 53分钟前 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部