关于优化冗余的多个if-else代码
关于优化冗余的多个if-else代码
会飞的小笨猪 发表于4个月前
关于优化冗余的多个if-else代码
  • 发表于 4个月前
  • 阅读 6
  • 收藏 1
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购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
×
会飞的小笨猪
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: