枚举优化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  方法,也可以采用策略-工厂......方式,有更好的方式,可以留言共同交流!!

目录
相关文章
|
Prometheus 监控 Cloud Native
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目JVM信息
Prometheus+Grafana监控SpringBoot项目JVM信息 1. SpringBoot项目配置JVM采集 2. Prometheus配置 3. 配置grafana 4. 扩展-通过JMX Exporter监控JVM信息
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目JVM信息
|
4月前
|
运维 Dubbo Cloud Native
Dubbo 云原生重构出击:更快部署、更强控制台、更智能运维
Apache Dubbo 最新升级支持云原生,提供一键部署微服务集群与全新可视化控制台,提升全生命周期管理体验,助力企业高效构建云原生应用。
377 25
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
227 26
|
传感器 人工智能 数据可视化
虚拟现实(VR)与增强现实(AR)的技术革新:塑造未来的沉浸式体验
【7月更文挑战第24天】VR和AR作为两种前沿的沉浸式技术,正以前所未有的速度改变着我们的世界。随着技术的不断革新和应用的不断拓展,我们有理由相信,未来的VR和AR将为我们带来更多令人惊叹的体验和技术革新。
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
389 0
|
Kubernetes 数据可视化 Linux
3款免费又好用的 Docker 可视化管理工具
3款免费又好用的 Docker 可视化管理工具
702 0
|
消息中间件 Java Kafka
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
333 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
|
存储 SQL 消息中间件
Flink未来-将与 Pulsar集成提供大规模的弹性数据处理
Flink未来-将与 Pulsar集成提供大规模的弹性数据处理
517 0
Flink未来-将与 Pulsar集成提供大规模的弹性数据处理
|
存储 算法 NoSQL
​浅谈分布式唯一Id生成器之最佳实践
​浅谈分布式唯一Id生成器之最佳实践
631 1
|
算法 Java Windows
Guava-RateLimiter详解
常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取令牌,只有取到令牌的请求才会被成功响应,获取的方式有两种:阻塞等待令牌或者取不到立即返回失败,下图来自网上: ratelimite原理图 本次实战,我们用的是guava的RateLimiter,场景是spring mvc在处理请求时候,从桶中申请令牌,申请到了就成功响应,申请不到时直接返回失败。
3325 0