场景

设计模式-策略模式在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实现映射存储的类似策略模式实现定制化流程相关推荐

  1. c枚举类型enum例题_一篇文章让你详细了解Java中Enum枚举类的使用

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

  2. java中的枚举类与注解学习笔记

    java中的枚举和注解 01.枚举类的使用 1.1.枚举类的理解 1.2.自定义枚举类 1.3.使用enum关键字定义枚举类 1.4.Enum类中的常用方法 1.5.使用enum关键字定义的枚举类实现 ...

  3. java中的枚举类_java中的枚举类型

    java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断.同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断. 首先我们用自定义类的方 ...

  4. Java中的枚举类是什么?enum关键字怎么使用?

    枚举类 文章目录 枚举类 枚举类的使用:入门 自定义枚举类 方法一:自定义枚举类 方式二: enum 关键字定义枚举类(主要用该方式) Enum类的主要方法 使用enum关键字定义的枚举类实现接口 主 ...

  5. java中的枚举_Java中的枚举

    java中的枚举 Enum was introduced in Java 1.5 as a new type whose fields consists of a fixed set of const ...

  6. 浅谈 Java 中的枚举

    枚举也就是一一列举,常用来表示那些可以明确范围的集合,比方说性别,季节,星期,月份等. 在 JDK 1.5 才出现枚举类,在没有出现枚举类之前,我们要表示几个确定的值通常会使用常量来表示,形如 pub ...

  7. Java中的枚举,竟然有这么多不为人知的知识点

    Java枚举,也称作Java枚举类型,是一种字段由一组固定常量集合组成的类型.枚举的主要目的是加强编译时类型的安全性.enum关键字是Java中的保留关键字. 在编译或设计时,当我们知道所有变量的可能 ...

  8. enum java 比较_Kotlin与Java比较:枚举类

    前言 Kotlin作为JVM系的语言,起源于Java又不同于Java.通过在语言层面比较两者的区别,可以使得开发者能够快速学习,融会贯通. 枚举使用场景 使用枚举的场景非常明确,即只要一个类的对象是有 ...

  9. Java中的枚举类型学习

    一:枚举的引入 enum全称enumeration,是JDK1.5中引入的新特性,存放在java.lang包中.下面就平时的学习和使用过程中用到的进行总结: 枚举(enum),是指一个经过排序的,被打 ...

最新文章

  1. [转载]基于数据挖掘技术入侵检测系统研究
  2. MATLAB从入门到精通系列之几个实用小技巧
  3. 只出现一次的数字Python解法
  4. Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
  5. 使用反射处理Java批注
  6. 阅读react-redux源码(二) - createConnect、match函数的实现
  7. [转]我是如何走进黑客世界的?
  8. LeetCode 1405. 最长快乐字符串(贪心)
  9. Jquery常用操作select篇
  10. 软件设计师教程---第一章计算机系统知识
  11. JS 更合理的随机分组
  12. 人工客服——图灵机器人教程
  13. 每秒订单数25倍提升,蘑菇街怎样跨过海量服务架构的技术藩篱?
  14. 魔兽世界自建服务器,魔兽世界怀旧服
  15. mac日历显示国家节假日及补班日期
  16. 为什么 50 欧姆成为了射频传输线的阻抗标准
  17. 怎么样删除计算机管理员用户账户,怎么样删除电脑中多出来的管理员账户
  18. win 10 安装visual studio 2010
  19. 2023复旦大学计算机考研经验分享
  20. google正在等待cnd.bootcss.com的响应

热门文章

  1. Shell编程——字符截取命令
  2. C++基础之成员变量的秘密
  3. 微软服务器cpu,微软Windows Server 2012 R2特性解析
  4. 21、建筑高度计算和建筑分类判断
  5. 【C语言】课程设计实训——人事管理系统
  6. oracle flashback 用法,使用Oracle10g Flashback database功能恢复用户错误
  7. ARP病毒网络防控实战手册
  8. java怎么用switch求闰年_2. 用switch结构实现输入某年某月某日,判断这一天是这一年的第几天。(考虑闰年) 源程序命名为: 完整学号姓名2.c 。_电子商务物流答案_学小易找答案...
  9. 22种编程语言,祝大家新年快乐
  10. 人气流量通通要!电商网站商品页设计超全面指南