枚举优化if-else if -else过程记录

简介: 枚举优化if-else if -else过程记录

目的

需求添加新条件,于是有了类似下面的代码:


if (Constant.BYTE_ONE.equals(params.getSpecialFlag())) {
this.send1(openid, params);
}elseif (Constant.BYTE_TWO.equals(params.getSpecialFlag())){
this.send2(openid, params);
}elseif (Constant.BYTE_THREE.equals(params.getSpecialFlag())){
this.send3(openid, params);
}elseif (Constant.BYTE_FOUR.equals(params.getSpecialFlag())){
this.send4(openid, params);
}elseif (BYTE_FIVE.equals(params.getSpecialFlag())){
this.send5(openid, params);
}elseif (BYTE_SIX.equals(params.getSpecialFlag())){
this.send6(openid, params);
}else {
this.sendDefault(openid, params);
}


以上代码肯定是不允许的,如果后期需求再次添加,还会添加很多else-if。


优化方案


1、枚举方式(本次采用)


2、策略-工厂模式


优化步骤:


一、编写枚举类:(公司代码已删减,以下伪代码,仅供参考)


publicenumOperatorTest {
ONE {
@Overridepublicvoidapply(StringopenId, OpportunityMsgParamsparams) {
// 调用的静态方法(业务方法)PT2WXMessageServiceImpl.send1(openId, params);
        }
    },
TWO {
@Overridepublicvoidapply(StringopenId, OpportunityMsgParamsparams) {
// 其他:如:两个值的 + - * /...//            return a * b;        }
    };
publicabstractvoidapply(StringopenId, OpportunityMsgParamsparams);
}

二、service层方法调用类:

publicclassApply {
publicvoidapply(StringopenId, OpportunityMsgParamsparams, OperatorTestoperatorTest) {
operatorTest.apply(openId, params);
    }
}

三、测试


// map加入所有类型staticMap<Byte, String>operationMap=newHashMap<>();
static {
operationMap.put((byte) 1, "ONE");
operationMap.put((byte) 2, "TWO");
}
@OverridepublicResponseMessagesendOpportunityMsg(OpportunityMsgParamsparams) {
    .....
// 获取需要的指定类型Stringvalue=operationMap.get(params.getSpecialFlag());
Applyapply=newApply();
// 调用枚举中的业务方法apply.apply(openid, params, OperatorTest.valueOf(value));
    ......
});

总结:以上只是采用枚举去除繁杂的  if-else if-else  方法,也可以采用策略-工厂......方式,有更好的方式,可以留言共同交流!!

目录
相关文章
|
2月前
|
缓存 开发者 Java
java枚举消除冗余代码问题之需要延迟注册枚举到缓存问题如何解决
java枚举消除冗余代码问题之需要延迟注册枚举到缓存问题如何解决
|
4月前
|
自然语言处理 网络协议 应用服务中间件
记录一次问题的解决过程
记录一次问题的解决过程
|
10月前
|
Java
策略枚举:消除在项目里大批量使用if-else的优雅姿势
可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。
82 0
判断两棵树是否完全一致
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
108 0
|
SQL 安全 Java
28个案例问题分析---007---在线人员逻辑反例--ThreadLocal、继承、索引失效、
28个案例问题分析---007---在线人员逻辑反例--ThreadLocal、继承、索引失效、
66 0
|
存储 资源调度 数据可视化
R问题|数值模拟流程记录和分享
R问题|数值模拟流程记录和分享
133 0
|
SQL MySQL 关系型数据库
Java实现获得MySQL数据库中所有表的记录总数可行方法
可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录。本文给出两种可行的Java程序查询所有别的记录方法,感兴趣朋友可以了解下 在MySQL中,可以通过SELECT COUNT(*) FROM table_name查询某个表中有多少条记录。如果想知道某个数据库中所有别的记录总数应该怎么做呢?本文给出两种可行的Java程序,解决该问题。 1. 首
1784 0
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
141 0
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
Kam
|
Java
枚举去除大量if-else if -else优化记录
java中去除大量if-else
Kam
338 1
|
算法 Java
灵魂拷问:如何检查Java数组中是否包含某个值 ?(2)
灵魂拷问:如何检查Java数组中是否包含某个值 ?
145 0