枚举去除大量if-else if -else优化记录

简介: java中去除大量if-else

目的:


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


if (Constant.BYTE_ONE.equals(params.getSpecialFlag())) {

   this.send1(openid, params);

}else if (Constant.BYTE_TWO.equals(params.getSpecialFlag())){

   this.send2(openid, params);

}else if (Constant.BYTE_THREE.equals(params.getSpecialFlag())){

   this.send3(openid, params);

}else if (Constant.BYTE_FOUR.equals(params.getSpecialFlag())){

   this.send4(openid, params);

}else if (BYTE_FIVE.equals(params.getSpecialFlag())){

   this.send5(openid, params);

}else if (BYTE_SIX.equals(params.getSpecialFlag())){

   this.send6(openid, params);

}else {

   this.sendDefault(openid, params);

}


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


优化方案:


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


2、策略-工厂模式


优化步骤:


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


public enum OperatorTest {


   ONE {

       @Override

       public void apply(String openId, OpportunityMsgParams params) {

           // 调用的静态方法(业务方法)

          PT2WXMessageServiceImpl.send1(openId, params);

       }

   },

   TWO {

       @Override

       public void apply(String openId, OpportunityMsgParams params) {

           // 其他:如:两个值的 + - * /...

//            return a * b;

       }

   };


   public abstract void apply(String openId, OpportunityMsgParams params);


}


二、service层方法调用类:


public class Apply {

   public void apply(String openId, OpportunityMsgParams params, OperatorTest operatorTest) {

       operatorTest.apply(openId, params);

   }

}


三、测试


// map加入所有类型

static Map<Byte, String> operationMap = new HashMap<>();

static {

   operationMap.put((byte) 1, "ONE");

   operationMap.put((byte) 2, "TWO");

}


@Override

public ResponseMessage sendOpportunityMsg(OpportunityMsgParams params) {

   .....

   // 获取需要的指定类型

   String value = operationMap.get(params.getSpecialFlag());

   Apply apply = new Apply();

   // 调用枚举中的业务方法

   apply.apply(openid, params, OperatorTest.valueOf(value));

   ......

});


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

更多java技术、java面试、互联网技术、娱乐技术请关注下面公众号:

目录
相关文章
|
2月前
|
数据处理
重复值的判断标准是否可以根据具体业务需求进行调整?
重复值的判断标准需要紧密结合具体的业务需求进行灵活调整,这样才能确保数据处理的准确性和有效性,为业务决策提供可靠的数据支持。
123 58
|
2月前
|
数据挖掘 Python
如何判断处理后的数据是否仍然存在重复值?
通过以上任意一种方法,都可以有效地判断处理后的数据是否仍然存在重复值,从而确保数据的准确性和唯一性,为后续的数据分析和处理提供可靠的数据基础。
109 10
|
2月前
|
数据挖掘 索引 Python
如何在处理重复值时保持数据的原始顺序?
可以在处理数据重复值时有效地保持数据的原始顺序,确保数据在清洗和预处理过程中不会因为重复值的处理而导致顺序混乱,从而保证了数据分析结果的准确性和可靠性。
148 64
|
5月前
去除数组重复成员的方法
去除数组重复成员的方法
47 2
|
数据安全/隐私保护
CE修改器入门:精确数值扫描
附加`Tutorial-i386.exe进程`后,我们点击教程的下一步按钮,接着继续第二关,第二关的作用还是很简单的,主要目的是遍历出我们想要的动态数据,比如角色的生命,人物的魔法等,都会用到精确扫描,可以说这一关是既简单又实用的东西,也是今后制作中最常用的环节,接着我们看下`Tutorial-i386.exe程序`对这一关通关流程的描述:
CE修改器入门:精确数值扫描
lodash判断值是否是原始有限数值
lodash判断值是否是原始有限数值
112 0
|
索引
jmu-枚举WeekDay(补全代码) (5 分)
jmu-枚举WeekDay(补全代码) (5 分)
118 0
Kam
枚举优化if-else if -else过程记录
枚举优化if-else if -else过程记录
Kam
239 0