小弟在某物流公司工作,近期临近过年需求比较松,发现项目的一个模块使用大量的if-else语句,于是乎想到用设计模式进行重构。
一、业务场景以及出现的问题
项目中有一个用户修改记录模块,对应数据库USER_MODIFY表,每次用户对主业务模块进行操作(如增加,删除,编辑等)会增在用户修改记录模块中增加相应信息(用户,操作名称等)。
现在项目中的代码存在下列问题:
使用了大量的if-else操作,增加用户修改记录方法addUserModifyRecord入参有两个:修改的对象Object,操作名称 Enum类型的ModifyType,对于每次的操作都对object和modifytype进行instanceof 和 if-else判断,最后决定应该向修改记录表中增加内容的具体值
二、解决思路
1、初步解决方案使用策略模式+工厂模式
三、策略模式+工厂模式消除if-else
如图所示为大致的uml图,下面做出一些解释:
1、UserModifyStrategy为策略的接口,下面声明了我们需要重构的方法
2、ViewScheduleStrategy等三个类为接口的实现,实现具体对应的策略细节
3、UserModifyContext为策略的引用
4、最下的工厂类负责根据object对策略进行创建
四、思考
这个方案有一个缺点就是类太多了,在实际项目中这样需要额外增加七八个类,后期再考虑用JDK8的函数式编程来进行重构,主要就是利用JDK8的Predicate和Consumer进行重构,目前还在学习其用法当中,欢迎各路大佬给予指导。