文档章节

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

 会飞的小笨猪
发布于 2017/09/08 15:33
字数 547
阅读 76
收藏 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
J-Focus 0.4.0 发布,JS动画应用框架

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

vimfung
2012/08/19
1K
0
关于重构的一些想法

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

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

没有更多内容

加载失败,请刷新页面

加载更多

docker-compose ,docker-stack

1.例子 version: "3"services: php: image: registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5 ports: - "38080:80" networks: - my_php_mysql volum......

chenbaojun
32分钟前
1
0
SQL_Server2000示例数据库NorthWind的分析(转)

SQL_Server2000示例数据库NorthWind的分析 表名:Categories(食品类别表) 表结构: 字段名称 数据类型 长度 允许为空 CategoryID(主键) int 4 否 CategoryName nvarchar 15 否 Description ...

QQZZFT
35分钟前
1
0
laravel 5.5 Session store not set on request.

laravel 5.5 数据存入session,会出现Session store not set on request.错误。查了下laravel 5.5将session放到global middleware中,需要laravel的文件 ./app/Http/Kernel.php中的加上一句:...

MichaelShu
今天
1
0
OpenCV VideoCapture.get()参数详解

param define cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位 cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引 cv2.VideoCapture.get(2) 视频文件的相对位置(...

NateHuang
今天
0
0
java基础知识,小栗子

来操作一下数组.....注意带参数的变长数组的使用. package com.avatus;import java.util.Random;import java.util.Scanner;public class Main { public static void main(St...

Oh_really
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部