JAVA 替代SWITCH 枚举值 CASE 的 策略模式

看看使用策略模式之前的代码:

//        switch (type) {
//            case 0:
//                terme.setKhdmlist(dmList);
//                List<Kehu> list = getSdList$api(terme);
//                for (Kehu kehu : list) {
//                    map = new HashMap<String, String>();
//                    map.put(kehu.getKhdm(), kehu.getKhmc());
//                    mapList.add(map);
//                }
//                break;
//            case 1:
//                terme.setGhsdmlist(dmList);
//                List<Gonghuoshang> list1 = getGhsList$api(terme);
//                for (Gonghuoshang gonghuoshang : list1) {
//                    map = new HashMap<String, String>();
//                    map.put(gonghuoshang.getGhsdm(), gonghuoshang.getGhsmc());
//                    mapList.add(map);
//                }
//                break;
//            case 2:
//                terme.setKhdmlist(dmList);
//                List<Kehu> list2 = getKehuList$api(terme);
//                for (Kehu kehu : list2) {
//                    map = new HashMap<String, String>();
//                    map.put(kehu.getKhdm(), kehu.getKhmc());
//                    mapList.add(map);
//                }
//                break;
//            case 3:
//                terme.setCkdmlist(dmList);
//                List<Cangku> list3 = getCangkuList$api(terme);
//                for (Cangku cangku : list3) {
//                    map = new HashMap<String, String>();
//                    map.put(cangku.getCkdm(), cangku.getCkmc());
//                    mapList.add(map);
//                }
//                break;
//            case 4:
//                terme.setQddmlist(dmList);
//                List<Qudao> list4 = getQudaoList$api(terme);
//                for (Qudao qudao : list4) {
//                    map = new HashMap<String, String>();
//                    map.put(qudao.getQddm(), qudao.getQdmc());
//                    mapList.add(map);
//                }
//                break;
//            case 5:
//                terme.setQydmlist(dmList);
//                List<Quyu> list5 = getQuyuList$api(terme);
//                for (Quyu quyu : list5) {
//                    map = new HashMap<String, String>();
//                    map.put(quyu.getQydm(), quyu.getQymc());
//                    mapList.add(map);
//                }
//                break;
//            case 6:
//                terme.setPpdmlist(dmList);
//                List<Pinpai> list6 = getPinpaiList$api(terme);
//                for (Pinpai pinpai : list6) {
//                    map = new HashMap<String, String>();
//                    map.put(pinpai.getPpdm(), pinpai.getPpmc());
//                    mapList.add(map);
//                }
//                break;
//            default:
//                break;
//        }
//        for (SysLimitItemGroupmx itemGroupmx : resList) {
//            boolean flag = false;
//            if (isNotEmpty(mapList)) {
//                for (Map<String, String> map1 : mapList) {
//                    if (map1.containsKey(itemGroupmx.getDxdm())) {
//                        flag = true;
//                        if (!map1.containsValue(itemGroupmx.getDxmc())) {
//                            itemGroupmx.setBz(str + "编码对应的" + str + "名称不对!");
//                        }
//                        break;
//                    }
//                }
//            }
//            if (!flag) {
//                itemGroupmx.setBz(str + "编码对应的数据不存在!");
//            }
//        }

使用 策略模式 之后的代码:

枚举类:

public enum LimitItemTypeEnum {OUTMETHOD(-1 ,"-1", "输出方法"),SHOP    (0 ,"0", "XX"),SUPPLIER(1 ,"1", "XXX"),CUSTOMER(2 ,"2", "XX"),STORE   (3 ,"3", "XX"),CHANNEL (4 ,"4", "XX"),AREA    (5, "5", "XX"),BRAND   (6, "6", "XX"),;private final Integer number;private final String code;private final String info;LimitItemTypeEnum(Integer number, String code, String info) {this.number=number;this.code = code;this.info = info;}public String getCode() {return code;}public String getInfo() {return info;}public Integer getNumber() {return number;}public String getInfoByNumber(int numberIn){String infoOut="";for(LimitItemTypeEnum typeEnum:LimitItemTypeEnum.values()){if(typeEnum.getNumber()==numberIn){infoOut=typeEnum.getInfo();break;}}return infoOut;}}

接口:

public interface CheckListItemService {void check(Long tenantId,List<SysLimitItemGroupmx> mxList) throws Exception;}

实现类:


public class CheckAreaListItemServiceImpl extends ApiFrag implements CheckListItemService {@Overridepublic void check(Long tenantId,List<SysLimitItemGroupmx> mxList) throws Exception{String typeName= LimitItemTypeEnum.AREA.getInfo();Terme term=new Terme();term.setTenantId(tenantId);term.setQydmlist(listField2StrList(mxList,"dxdm"));List<Quyu> list = getQuyuList$api(term);Map<String, String> map  = new HashMap();;for (Quyu quyu : list) {map.put(quyu.getQydm(), quyu.getQymc());}for (SysLimitItemGroupmx itemGroupmx : mxList) {String key=itemGroupmx.getDxdm();boolean flag = map.containsKey(key);if(flag)    itemGroupmx.setDxmc(map.get(key));else    itemGroupmx.setBz(typeName + "编码对应的数据不存在!");itemGroupmx.setFlag(flag);}}}

public class CheckBrandListItemServiceImpl extends ApiFrag implements CheckListItemService {@Overridepublic void check(Long tenantId,List<SysLimitItemGroupmx> mxList) throws Exception{String typeName= LimitItemTypeEnum.BRAND.getInfo();Terme term=new Terme();term.setTenantId(tenantId);term.setPpdmlist(listField2StrList(mxList,"dxdm"));List<Pinpai> list = getPinpaiList$api(term);Map<String, String> map  = new HashMap();;for (Pinpai item : list) {map.put(item.getPpdm(), item.getPpmc());}for (SysLimitItemGroupmx itemGroupmx : mxList) {String key=itemGroupmx.getDxdm();boolean flag = map.containsKey(key);if(flag)    itemGroupmx.setDxmc(map.get(key));else    itemGroupmx.setBz(typeName + "编码对应的数据不存在!");itemGroupmx.setFlag(flag);}}}

上下文类:

public class CheckLimitItemProcessor {private final Map<Integer, CheckListItemService> strategyMap;public CheckLimitItemProcessor() {strategyMap = new HashMap<>();strategyMap.put(LimitItemTypeEnum.AREA.getNumber(), new CheckAreaListItemServiceImpl());strategyMap.put(LimitItemTypeEnum.BRAND.getNumber(), new CheckBrandListItemServiceImpl());strategyMap.put(LimitItemTypeEnum.CUSTOMER.getNumber(), new CheckCustomerListItemServiceImpl());strategyMap.put(LimitItemTypeEnum.SHOP.getNumber(), new CheckShopListItemServiceImpl());strategyMap.put(LimitItemTypeEnum.STORE.getNumber(), new CheckStoreListItemServiceImpl());strategyMap.put(LimitItemTypeEnum.SUPPLIER.getNumber(), new CheckSupplierListItemServiceImpl());}public void checkItem(Integer type,Long tenantId, List<SysLimitItemGroupmx> mxList)throws Exception{CheckListItemService strategy = strategyMap.get(type);if (strategy == null) {throw new IllegalArgumentException("Unsupported LimitItem type.");}strategy.check(tenantId,mxList);}}

 使用:

      CheckLimitItemProcessor processor = new CheckLimitItemProcessor();processor.checkItem(type,tenantId,resList);

 在java 中实际开发功能时候,我想绝大多数人应该是倾向于使用case when 的,而设计模式大部分用于架构层,至于该怎么用,我觉得还是黑猫白猫都行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文学习_Large Language Models Based Fuzzing Techniques: A Survey

论文名称发表时间发表期刊期刊等级研究单位 Large Language Models Based Fuzzing Techniques: A Survey 2024年arXiv- 悉尼大学 0.摘要 研究背景在软件发挥举足轻重作用的现代社会&#xff0c;软件安全和漏洞分析对软件开发至关重要&#xff0c;模糊测试作为一种高效的软件…

前端学习-day10

文章目录 01-体验平面转换02-平移效果03-绝对定位元素居中04-案例-双开门06-转换旋转中心点07-案例-时钟-转换原点08-平面转换-多重转换09-缩放效果10-案例-按钮缩放11-倾斜效果12-渐变-线性13-案例-产品展示14-渐变-径向15-综合案例-喜马拉雅 01-体验平面转换 <!DOCTYPE h…

2024.6.17总结1113

今天早上进行了毕设答辩&#xff0c;无论是打印报告还是答辩&#xff0c;整个过程都挺顺利的。 其实&#xff0c;昨天还是挺慌的&#xff0c;就觉得自己的论文还存在许多问题&#xff0c;但是&#xff0c;早上看到那么多人的论文都存在这样那样的问题的时候&#xff0c;我反而…

Spring框架的原理及应用详解(七)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;随着应用复杂性的不断增加和技术的快速发展&#xff0c;传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此&#xff0c;开发者们一直在寻求更加高效、灵活且易于管理的开发框架&#xff0c…

C#(C Sharp)学习笔记_多态【十九】

前言 个人觉得多态在面向对象编程中还比较重要的&#xff0c;而且不容易理解。也是学了一个下午&#xff0c;才把笔记写得相对比较完善&#xff0c;但仍欠缺一些内容。慢慢来吧…… 什么是多态&#xff1f; 基本概念 在编程语言和类型论中&#xff0c;多态&#xff08;Poly…

C# + easyui 写的一个web项目

用C# easyui 来开发&#xff0c;其实就是为了开发速度&#xff0c;用easyui可以一天写很多页面&#xff0c;比一些低代码平台还快。 登陆页面 主界面 记录数统计 家庭信息采集表 新建家庭 家庭成员 低保、五保人员帮扶情况登记表 低保、五保人员帮扶情况登记表的新增和编辑 治…

【UE数字孪生学习笔记】 Gameplay框架之TSubclassOf

声明&#xff1a;部分内容来自于b站&#xff0c;知乎&#xff0c;慕课&#xff0c;公开课等的课件&#xff0c;仅供学习使用。如有问题&#xff0c;请联系删除。 部分内容来自UE官方文档&#xff0c;博客等 TSubclassOf TSubclassOf 是一个模板类&#xff0c;用于存储对某个特…

科研辅助工具

科研工具收集 1. 如何筛选出最合适的SCI论文投稿杂志:点击直达 2. 分享三种正确查找期刊全称、缩写的网站: 点击直达

(done) AFL 都有哪些阶段? Stage progress

参考资料&#xff1a;https://afl-1.readthedocs.io/en/latest/user_guide.html 所有阶段如下&#xff0c;包括详细的解释

论文《Dual-Contrastive for Federated Social Recommendation》阅读

论文《Dual-Contrastive for Federated Social Recommendation》阅读 论文概况MotivationMethodologyClient Local ComputingCenter Server Aggregation 总结 今天简单总结一下一篇关于联邦推荐方面的论文《Dual-Contrastive for Federated Social Recommendation》&#xff0c…

Java | Leetcode Java题解之第162题寻找峰值

题目&#xff1a; 题解&#xff1a; class Solution {public int findPeakElement(int[] nums) {int n nums.length;int left 0, right n - 1, ans -1;while (left < right) {int mid (left right) / 2;if (compare(nums, mid - 1, mid) < 0 && compare(n…

【Linux 内存管理】

文章目录 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d; 1. 为什么要有虚拟内存呢&#xff1f;&#x1f50d;

如何实现element表格合并行?

前两天我一个朋友咨询我element表格合并行的问题,他研究了很久,已经开始怀疑是不是element UI出现了bug,然后跟我一阵沟通,最终解决了问题,他的问题在于他把事情想复杂了,接下来我们一起来看一下这个经典“案例”,很多人真的很有可能走入这个误区,当然老鸟就不用看了,…

读AI新生:破解人机共存密码笔记04计算的极限

1. 计算的极限 1.1. 光靠速度是无法给我们带来人工智能的 1.1.1. 在速度更快的计算机上运行糟糕的算法并不会使算法变得更优秀&#xff0c;这只意味着你会更快地得到错误的答案 1.1.2. 数据越多&#xff0c;错误答案出现的机会就越大 1.…

pytorch基础【3】torch运算

文章目录 torch运算基本运算形状操作自动调整size (参数-1) 数学运算逻辑运算常见的高级操作随机数生成 torch运算 基本运算 创建张量: import torch# 直接从列表或数组创建张量 x torch.tensor([1, 2, 3])创建特定值的张量: # 全零张量 zeros torch.zeros(3, 3)# 全一张量 …

python调用SDK的问题

问题&#xff1a;Could not find module MvCameraControl.dll 原因&#xff1a;识别环境变量runtime异常 解决&#xff1a;指定具体绝对地址即可。MvCameraControl.dll的位置C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64 MvCamCtrldll WinDLL("MvCamer…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 石碑文字组合(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

Rust语言-线程间的消息传递mpsc::Sender

文章目录 Rust语言-线程间的消息传递mpsc::Sender标准库std::sync::mpsc消息通道mpsc::Sender实战举例 Rust语言-线程间的消息传递mpsc::Sender 标准库std::sync::mpsc 官方文档&#xff1a;https://rustwiki.org/zh-CN/std/sync/mpsc/index.html 参考URL: https://course.rs…

[C++][数据结构][哈希表]详细讲解

目录 1.哈希概念2.哈希冲突3.哈希函数4.哈希冲突解决5.闭散列1.何时扩容&#xff1f;如何扩容&#xff1f;2.线性探测3.二次探测 6.开散列(哈希桶)1.概念2.开散列增容3.开散列思考只能存储key为整形的元素&#xff0c;其他类型怎么解决&#xff1f;除留余数法&#xff0c;最好模…

一季度直播6000场,同比增长60%,遥望科技透露重要信息

6月17日&#xff0c;经由深圳证券交易所许可&#xff0c;遥望科技&#xff08;股票代码&#xff1a;002291&#xff09;正式对《年报问询函》进行公开回复&#xff0c;就经营的多个维度做出解释和回应。 在回复中&#xff0c;遥望科技预测2024年毛利率为14.4%&#xff0c;相比…