Java中使用枚举类和switch实现映射存储的类似策略模式实现定制化流程
场景
设计模式-策略模式在Java中的使用示例:
设计模式-策略模式在Java中的使用示例_java 策略模式示例_霸道流氓气质的博客-CSDN博客
上面讲了策略模式在Java中的使用示例。
但是在有些场景下不需要严格的规则区分,只需要根据传递的参数以及自定义存储的处理逻辑映射,进行不同的代码逻辑。
可以借助于枚举类的使用,在static代码块中将映射关系存储,在实际业务层中根据传递参数获取对应的处理逻辑。
通过switch进行判断进行。
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
实现
1、首先定义枚举类
public enum EcuPrefixEnum
{CAR_NUM, ECU_CAR_NUM;private static final Map<String, EcuPrefixEnum> mappings = new HashMap<>();static{mappings.put(MineMessageEnum.JJT.getApiCode(),CAR_NUM);mappings.put(MineMessageEnum.ZLW.getApiCode(),ECU_CAR_NUM);}@Nullablepublic static EcuPrefixEnum resolve(@Nullable String mineCode){return (mineCode != null ? mappings.get(mineCode) : null);}}
这里定义了两种不同方式的枚举变量。
其中在static中初始化存储了映射关系,map中的key又是另一个枚举类,此枚举类用来存储信息用,
也可直接使用字符串写死。
mappings.put("jjt",CAR_NUM);
这里使用MineMessageEnum来存储映射关系信息。
比如需要通过apiCode来获取不同的mineCode和mineName,则可以通过
MineMessageEnum.resolve(mineApiCode).getMineCode()
MineMessageEnum.resolve(mineApiCode).getMineName()
来实现。
MineMessageEnum代码:
public enum MineMessageEnum
{JJT("jjt", "0001","名称1", Constants.SIFANGJI),ZLW("zlw", "0002","名称2",Constants.SIFANGJI),CCL("ccl", "0003","名称3",Constants.KEERMA);private final String apiCode;private final String mineCode;private final String mineName;private final String signalRule;private static final Map<String, MineMessageEnum> mappings = new HashMap<>();static{for (MineMessageEnum messageEnum : values()){mappings.put(messageEnum.apiCode, messageEnum);}}@Nullablepublic static MineMessageEnum resolve(@Nullable String mineApiCode){return (mineApiCode != null ? mappings.get(mineApiCode) : null);}MineMessageEnum(String apiCode, String mineCode, String mineName,String signalRule){this.apiCode = apiCode;this.mineCode = mineCode;this.mineName = mineName;this.signalRule = signalRule;}public String getApiCode() {return apiCode;}public String getMineCode() {return mineCode;}public String getMineName() {return mineName;}public String getSignalRule() {return signalRule;}
}
上面的Constants是一个常量类
public class Constants {public static final String SIFANGJI = "sifangji";public static final String KEERMA = "keerma";}
下面resolve用来根据传递的参数来获取map中对应的value。
2、在实际业务中可以根据传递参数和switch进行不同的逻辑处理
public BusCarEcu getBusCarEcu(String carNumber,String mineCode) {try {String ecuKeyPrefix;switch (EcuPrefixEnum.resolve(mineCode)){case CAR_NUM:ecuKeyPrefix = carNumber;break;case ECU_CAR_NUM:ecuKeyPrefix = Constants.ECU+carNumber;break;default:ecuKeyPrefix = Constants.ECU+carNumber;}BusCarEcu busCarEcu = redisCache.getCacheObject(ecuKeyPrefix);return busCarEcu;}catch (Exception exception){System.out.println("getBusCarEcu结果异常:"+exception.getMessage());return new BusCarEcu();}}
以上结果就是传递mineCode为jjt时则获取对应的mineCode和mineName,并且在执行getBusCarEcu业务方法时,
根据mineCode不同执行不同的业务逻辑。
Java中使用枚举类和switch实现映射存储的类似策略模式实现定制化流程相关推荐
- c枚举类型enum例题_一篇文章让你详细了解Java中Enum枚举类的使用
文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...
- java中的枚举类与注解学习笔记
java中的枚举和注解 01.枚举类的使用 1.1.枚举类的理解 1.2.自定义枚举类 1.3.使用enum关键字定义枚举类 1.4.Enum类中的常用方法 1.5.使用enum关键字定义的枚举类实现 ...
- java中的枚举类_java中的枚举类型
java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断.同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断. 首先我们用自定义类的方 ...
- Java中的枚举类是什么?enum关键字怎么使用?
枚举类 文章目录 枚举类 枚举类的使用:入门 自定义枚举类 方法一:自定义枚举类 方式二: enum 关键字定义枚举类(主要用该方式) Enum类的主要方法 使用enum关键字定义的枚举类实现接口 主 ...
- java中的枚举_Java中的枚举
java中的枚举 Enum was introduced in Java 1.5 as a new type whose fields consists of a fixed set of const ...
- 浅谈 Java 中的枚举
枚举也就是一一列举,常用来表示那些可以明确范围的集合,比方说性别,季节,星期,月份等. 在 JDK 1.5 才出现枚举类,在没有出现枚举类之前,我们要表示几个确定的值通常会使用常量来表示,形如 pub ...
- Java中的枚举,竟然有这么多不为人知的知识点
Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型.枚举的主要目的是加强编译时类型的安全性.enum关键字是Java中的保留关键字. 在编译或设计时,当我们知道所有变量的可能 ...
- enum java 比较_Kotlin与Java比较:枚举类
前言 Kotlin作为JVM系的语言,起源于Java又不同于Java.通过在语言层面比较两者的区别,可以使得开发者能够快速学习,融会贯通. 枚举使用场景 使用枚举的场景非常明确,即只要一个类的对象是有 ...
- Java中的枚举类型学习
一:枚举的引入 enum全称enumeration,是JDK1.5中引入的新特性,存放在java.lang包中.下面就平时的学习和使用过程中用到的进行总结: 枚举(enum),是指一个经过排序的,被打 ...
最新文章
- [转载]基于数据挖掘技术入侵检测系统研究
- MATLAB从入门到精通系列之几个实用小技巧
- 只出现一次的数字Python解法
- Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
- 使用反射处理Java批注
- 阅读react-redux源码(二) - createConnect、match函数的实现
- [转]我是如何走进黑客世界的?
- LeetCode 1405. 最长快乐字符串(贪心)
- Jquery常用操作select篇
- 软件设计师教程---第一章计算机系统知识
- JS 更合理的随机分组
- 人工客服——图灵机器人教程
- 每秒订单数25倍提升,蘑菇街怎样跨过海量服务架构的技术藩篱?
- 魔兽世界自建服务器,魔兽世界怀旧服
- mac日历显示国家节假日及补班日期
- 为什么 50 欧姆成为了射频传输线的阻抗标准
- 怎么样删除计算机管理员用户账户,怎么样删除电脑中多出来的管理员账户
- win 10 安装visual studio 2010
- 2023复旦大学计算机考研经验分享
- google正在等待cnd.bootcss.com的响应
热门文章
- Shell编程——字符截取命令
- C++基础之成员变量的秘密
- 微软服务器cpu,微软Windows Server 2012 R2特性解析
- 21、建筑高度计算和建筑分类判断
- 【C语言】课程设计实训——人事管理系统
- oracle flashback 用法,使用Oracle10g Flashback database功能恢复用户错误
- ARP病毒网络防控实战手册
- java怎么用switch求闰年_2. 用switch结构实现输入某年某月某日,判断这一天是这一年的第几天。(考虑闰年) 源程序命名为: 完整学号姓名2.c 。_电子商务物流答案_学小易找答案...
- 22种编程语言,祝大家新年快乐
- 人气流量通通要!电商网站商品页设计超全面指南