(超简单)SpringBoot中简单用工厂模式来实现
简单讲述业务需求
业务需要根据不同的类型返回不同的用户列表,比如按角色查询用户列表、按机构查询用户列表,用户信息需要从数据库中查询,因为不同的类型查询的逻辑不相同,因此简单用工厂模式来设计一下;
首先新建一个返回用户列表的接口
/*** 定义一个返回的用户列表接口* @author sinder* @date 2024/5/7 22:15*/
public interface ReturnUser {List<String> getUserByType();
}
再分别新建返回机构用户列表和角色用户列表的实现类
这里简化一下,执行的sql操作是测试表的,返回的数据固定的;
/*** @author sinder* @date 2024/5/7 22:29*/
@Component
public class OrgUserImpl implements ReturnUser {@Autowiredprivate TbTestMapper tbTestMapper;/*** 返回按机构返回的用户* @return*/@Overridepublic List<String> getUserByType() {System.out.println("按机构返回用户列表");ArrayList<String> list = new ArrayList<>();list.add("org1");list.add("org2");list.add("org3");List<TbTest> tbTests = tbTestMapper.getList();System.out.println(tbTests);return list;}
}
/*** 用户工厂实现类* @author sinder* @date 2024/5/7 22:14*/
@Component
public class RoleUserImpl implements ReturnUser {@Autowiredprivate TbTestMapper tbTestMapper;/*** 按角色用户返回* @return*/@Overridepublic List<String> getUserByType() {System.out.println("按角色返回用户列表");ArrayList<String> list = new ArrayList<>();list.add("role1");list.add("role2");list.add("role3");List<TbTest> tbTests = tbTestMapper.getList();System.out.println(tbTests);return list;}
}
然后新建一个工厂类
/*** 返回用户工厂* @author sinder* @date 2024/5/7 22:31*/
@Component
public class ReturnUserFactory {@Autowiredprivate RoleUserImpl roleUser;@Autowiredprivate OrgUserImpl orgUser;public ReturnUser getUserList(String module) {switch (UserType.customValueOf(module)) {case ROLE:return roleUser;case ORG:return orgUser;default:return null;}}
}
这里用到了枚举,并重写了valueOf(),以下:
/*** @author sinder* @date 2024/5/7 22:33*/
public enum UserType {ORG("org"),ROLE("role");private final String name;UserType(String name) {this.name = name;}// 重写valueOf方法public static UserType customValueOf(String text) {for (UserType userType : UserType.values()) {if (userType.name.equalsIgnoreCase(text)) {return userType;}}throw new IllegalArgumentException("No constant with name " + text + " found");}}
测试
@Testpublic void testReturnUser() {List<String> orgList = returnUserFactory.getUserList("org").getUserByType();List<String> roleList = returnUserFactory.getUserList("role").getUserByType();System.out.println(orgList);System.out.println(roleList);}

简单应用一下设计模式,具体关于工厂模式和单例模式的介绍和使用可以看以下详细博客说明
(超详细)JAVA设计模式:单例模式和工厂模式
简单记录,有更好的想法可以评论区指导一波!!!
相关文章:
(超简单)SpringBoot中简单用工厂模式来实现
简单讲述业务需求 业务需要根据不同的类型返回不同的用户列表,比如按角色查询用户列表、按机构查询用户列表,用户信息需要从数据库中查询,因为不同的类型查询的逻辑不相同,因此简单用工厂模式来设计一下; 首先新建一个…...
java中的条件、循环和scanner类
if else ; 单行逻辑大括号可以省略;但是不建议省略; public static void main(String[] args) {boolean bool1 (Math.random() * 1000) % 2 > 1;System.out.println((Math.random() * 1000) % 2 "-" bool1);if(bool1) {System.out.prin…...
【Qt QML】Frame组件
Frame(框架)包含在: import QtQuick.Controls继承自Pane控件。用于在可视框架内布局一组逻辑控件。简单来说就是用来包裹和突出显示其他可视元素。Frame不提供自己的布局,但需要自己对元素位置进行设置和定位,例如通过…...
Web API之DOM
DOM 一.认识DOM二.获取元素三.事件基础四.操作元素(1).改变元素内容(2).修改元素属性(str、herf、id、alt、title)(3).修改表单属性(4).修改样式属性操作(5).小结 五.一些思想(1).排他思想(2).自定义属性的操作 六.节点操作1.认识2.节点层级关系3.创建和添加、删除、…...
windows驱动开发-内核编程技术汇总(六)
在驱动程序中使用文件 内核模式组件通过其对象名称引用文件,该对象名称是连接到文件的完整路径的 \DosDevices 。 在 Microsoft Windows 2000 及更高版本的操作系统上, \?? 等效于 \DosDevices。例如,C:\WINDOWS\example.txt 文件的对象名…...
Windows Server 2019虚拟机安装
目录 第一步、准备工作 第二步、部署虚拟机 第三步、 Windows Server 2019系统启动配置 第一步、准备工作 下载Windows Server 2019系统镜像 官网下载地址:Windows Server 2019 | Microsoft Evaluation Center VMware Workstation 17下载地址: 链…...
【软件工程】详细设计
目录 前言详细设计算法设计工具——判定表 前言 软件工程生命周期分为八个阶段: 问题定义—>可行性研究—>需求分析 —>概要设计—>详细设计—>编码与单元测试 —>综合测试—>软件维护 这节我们讲的是软件开发流程中的一个阶段,需求…...
在K8S中,集群可以做哪些优化?
在Kubernetes(简称K8s)集群中,可以进行多种优化以提升性能、稳定性和资源利用率。以下是一些常见的优化措施: 控制面组件优化: kube-apiserver 高可用与扩展:通过配置多个API服务器实例并使用负载均衡器分发…...
【C++】从零开始认识多态
送给大家一句话: 一个犹豫不决的灵魂,奋起抗击无穷的忧患,而内心又矛盾重重,真实生活就是如此。 – 詹姆斯・乔伊斯 《尤利西斯》 _φ(* ̄ω ̄)ノ_φ(* ̄ω ̄)&…...
为什么叫“机器学习”Machine Learning 而不是“计算机学习”——深度学习Note
有一门学科“机器学习”火了起来,它是计算机科学与数学结合的产物,它的目的是使计算机“聪明”起来,实现人工智能。可是,令人困惑的是它明明就是计算机学习,为什么不叫“计算机学习”而叫“机器学习”呢?这…...
Spring Boot集成RabbitMQ-之6大模式总结
A.集成 一:添加依赖 在pom.xml文件中添加spring-boot-starter-amqp依赖,以便使用Spring Boot提供的RabbitMQ支持: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp&…...
后端开发面经系列 -- 滴滴C++一面面经
滴滴C一面面经 公众号:阿Q技术站 来源:https://www.nowcoder.com/feed/main/detail/38cf9704ef084e27903d2204352835ef 1、const在C和C区别,const定义的类成员变量如何初始化? 区别 C中的const: 在C中,c…...
Three.js的几何形状
在创建物体的时候,需要传入两个参数,一个是几何形状【Geometry】,一个是材质【Material】 几何形状主要是存储一个物体的顶点信息,在Three中可以通过指定一些特征来创建几何形状,比如使用半径来创建一个球体。 立方体…...
设计模式——单例模式(Singleton)
单例模式(Singleton Pattern)是设计模式中的一种,它确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在多种场景下都非常有用,比如配置文件的读取、数据库连接的创建、线程池的管理等。 实现…...
springboot3项目练习详细步骤(第二部分:文章分类模块)
新增文章分类 接口文档 业务实现 参数校验 文章分类列表 接口文档 业务实现 获取文章分类详情 接口文档 业务实现 更新文章分类 接口文档 业务实现 分组校验 问题 概念 实现步骤 总结 删除文章分类 接口文档 业务实现 该模块大部分请求的路径相同&…...
VUE中父组件向子组件进行传值
在 Vue 中,父组件向子组件传值主要通过在子组件的标签上绑定属性(props)的方式来实现。以下是一个具体的示例。 父组件(ParentComponent.vue): <template><div><!-- 父组件中使用子组件,并传…...
alpine安装中文字体
背景 最近在alpine容器中需要用到中文字体处理视频,不想从本地拷贝字体文件, 所以找到了一个中文的字体包font-droid-nonlatin,在此记录下。 安装 apk add font-droid-nonlatin安装好后会出现在目录下/usr/share/fonts/droid-nonlatin/ 这…...
JavaScript学习—JavaScript高级
原型链和继承 在 JavaScript 中,每个对象都有一个原型(prototype),这个原型指向另一个对象。这个链式的原型关系被称为原型链。当访问一个对象的属性时,如果该对象没有该属性,它会沿着原型链向上查找&…...
CompletableFuture使用案例
优化代码时,除了Async注解,项目中如何使用多线程异步调用? 举个例子,去餐厅吃饭的时候。先点餐,厨师做菜,在厨师做菜的时候打游戏,然后根据厨师做的菜的口味去买矿泉水还是可乐。这样࿰…...
安卓使用so库
最近需要给小伙伴扫盲一下如何使用Android Studio 生成一个SO文件,网上找了很多都没有合适的样例,那只能自己来写一个了。 原先生成SO是一个很麻烦的事情,现在Android Studio帮忙做了很多的事情,基本只要管好自己的C代码即可。 …...
D1016UK,1MHz至1GHz宽带适用的低噪声高效率射频功率晶体管
简介今天我要向大家介绍的是 TT Electronics/Semelab 的DMOS RF FET晶体管——D1016UK。这是一款专为VHF/UHF通信频段(1 MHz至1GHz)设计的金金属化多用途硅RF功率场效应管,采用推挽式架构,在28V工作电压下可提供40W的输出功率。作…...
燃油车的“催命符”还是环保的“里程碑”?2026年Euro 7标准下的汽车变局
如果你正打算换车,或者对汽车行业的未来走向充满好奇,那么“Euro 7”(欧7排放标准)绝对是你绕不开的一个关键词。这项被业内称为“史上最严”的排放法规,将于2026年11月29日正式对新车型实施强制认证。它不仅给内燃机戴…...
用PyTorch复现BCNet息肉分割模型:从论文到代码的保姆级实践指南
用PyTorch复现BCNet息肉分割模型:从论文到代码的保姆级实践指南 医学影像分析领域,息肉分割一直是内窥镜诊断的关键技术。传统方法依赖医生手动标注,效率低下且易受主观因素影响。近年来,深度学习在医学图像分割领域展现出强大潜…...
告别Resources和AssetBundle!用Unity Addressable重构你的资源管理(附迁移实战)
Unity Addressable系统深度重构:从传统资源管理到现代化架构的平滑迁移 在Unity项目开发中,资源管理一直是困扰开发者的核心难题之一。随着项目规模扩大,传统的Resources加载和AssetBundle管理方案逐渐暴露出性能瓶颈、热更新困难、依赖管理复…...
Android Studio中文界面汉化教程:3步实现母语开发环境
Android Studio中文界面汉化教程:3步实现母语开发环境 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Android …...
在华为欧拉openEuler 22.03 SP2上搞定Oracle 11g R2:一个踩坑无数的可视化安装实录
在华为欧拉openEuler 22.03 SP2上搞定Oracle 11g R2:一个踩坑无数的可视化安装实录 当国产操作系统遇上传统商业数据库,这场跨越技术栈的"联姻"注定充满挑战。作为在openEuler 22.03 SP2上成功部署Oracle 11g R2的实践者,我将以时间…...
如何快速备份微信聊天记录:Mac用户的完整解决方案
如何快速备份微信聊天记录:Mac用户的完整解决方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经因为误删重要微信聊天记录而懊恼不已?…...
3步解锁Windows隐藏音质:免费工具让普通音箱变HIFI
3步解锁Windows隐藏音质:免费工具让普通音箱变HIFI 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 你是不是总觉得电脑声音"干巴巴"的?看大片缺乏震撼感,听…...
新手也能搞定的12V转5V Buck电源:手把手教你用Multisim仿真验证设计
从零开始设计12V转5V Buck电源:Multisim仿真全流程指南 第一次接触DC-DC电源设计时,面对各种参数计算和仿真验证,很多新手都会感到无从下手。本文将带你一步步完成12V转5V的Buck电源设计,从理论计算到Multisim仿真验证,…...
GIS技巧100例23-ArcGIS像元统计实战:从月度栅格到年度气候指标
1. 像元统计基础与气候数据特点 刚接触GIS处理气候数据时,我经常被各种栅格格式和统计方法搞得晕头转向。直到有次用ArcGIS的像元统计工具批量处理了5年的月降水数据,才发现这个功能简直是隐藏的效率神器。像元统计(Cell Statisticsÿ…...
