(超简单)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 {

    @Autowired
    private TbTestMapper tbTestMapper;


    /**
     * 返回按机构返回的用户
     * @return
     */
    @Override
    public 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 {

    @Autowired
    private TbTestMapper tbTestMapper;

    /**
     * 按角色用户返回
     * @return
     */

    @Override
    public 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 {

    @Autowired
    private RoleUserImpl roleUser;

    @Autowired
    private 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");
    }

}

测试

@Test
    public 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设计模式:单例模式和工厂模式


简单记录,有更好的想法可以评论区指导一波!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

数据结构复习/学习9--堆/堆实现/升降序建堆/top-k问题

一、堆与完全二叉树 1.堆的逻辑与物理结构 2.父节点与子节点的下标 3.大小根堆 二、堆的实现&#xff08;大根堆为例&#xff09; 注意事项总结&#xff1a; 注意堆中插入与删除数据的位置和方法与维持大根堆有序时的数据上下调整 三、堆排序 1.排升序建大堆效率高 注意事项…

Android 开机启动扫描SD卡apk流程源码分析

在开机的时候&#xff0c;装在SD卡的apk和装在系统盘的apk扫描过程不一样&#xff0c;系统盘apk在系统启动过程中扫描&#xff0c;而SD卡上的就不是&#xff0c;等系统启动好了才挂载、扫描&#xff0c;下面就说下SD扫描的流程&#xff1a; 在SystemServer启动MountService&am…

Golang | Leetcode Golang题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; func searchMatrix(matrix [][]int, target int) bool {m, n : len(matrix), len(matrix[0])i : sort.Search(m*n, func(i int) bool { return matrix[i/n][i%n] > target })return i < m*n && matrix[i/n][i%n] target }

【查找算法】之二分查找

一、算法介绍 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。对于包含 n 个元素的有序数组&#xff0c;二分查找的步骤如下&#xff1a; 确定搜索范围&#xff1a;首先&#xff0c;将要查找的元素与数组中间的元素进行比较。如果…

链舞算法谱---链表经典题剖析

前言&#xff1a;探究链表算法的奥秘&#xff0c;解锁编程新世界&#xff01; 欢迎来到我的链表算法博客&#xff0c;这将是您深入了解链表算法&#xff0c;提升编程技能的绝佳机会。链表作为数据结构的重要成员之一&#xff0c;其动态性和灵活性在实现某些功能上发挥不可替代的…

联发科技发布天玑9300+旗舰5G生成式AI芯片 | 最新快讯

5 月 7 日消息&#xff0c;联发科技今天举办了天玑开发者大会 2024。大会上&#xff0c;联发科技开启了“天玑 AI 先锋计划”&#xff0c;联合业界生态企业发布了《生成式 AI 手机产业白皮书》&#xff0c;分享了生成式 AI 端侧部署的解决方案“天玑 AI 开发套件”。同时&#…

界面组件DevExpress Reporting中文教程 - 如何按条件显示页面水印?

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 从防止未经授权的使用到建立所有权和真实性&am…

java语言数据结构(单链表)

前言 不得承认java应用的广泛&#xff0c;所以毅然决定java版本的数据结构和算法专题还是要坚决更新。每日更新2题&#xff0c;希望学习的小伙伴可以关注一波跟上&#xff0c;评论区欢迎讨论交流。 实现原理 节点&#xff08;Node&#xff09;&#xff1a;链表的基本构建单元…

【Git】Git学习-07:git diff查看差异

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili 默认比较工作区和暂存区的差异 工作区和版本库的内容比较 git diff HEAD / git diff --staged 暂存区和版本库内容比较 git diff --cached 比较特定两个版本的不同 git diff 版本id 版本id HEAD表示提交的…

【Git】Git学习-17:git rebase,且解决合并冲突

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 理论 git rebase 目标分支&#xff1a;把当前分支的提交&#xff0c;从与目标分支的共同主祖先处断开…

Ubuntu 24.04 LTS 安装 touchegg 开启触控板多指手势

文章目录 〇、概述一、安装 touchegg二、安装 gnome-shell 扩展 X11 Gestures三、安装可视化配置工具 touche 〇、概述 之前为了让笔记本支持多指手势&#xff0c;我安装的是 fusuma&#xff0c;安装教程详见 这篇文章 &#xff0c;考虑到 fusuma 安装过程繁琐且不支持可视化配…

Redis单机安装

1.编译 cd redis安装目录 makemake install2.修改配置文件redis.conf #端口修改 port 6379 #后台进程启动 yes daemonize yes # daemonize no #注释掉 为了可以远程连接 #bind 127.0.0.1 #设置密码 requirepass pwd3.启动 ./redis-server ../redis.conf查看进程 [rootlocal…

地盘紧固的关键技术——SunTorque智能扭矩系统

底盘紧固件是汽车底盘系统中不可或缺的一部分&#xff0c;它们负责连接和固定各个部件&#xff0c;确保车辆行驶的安全和稳定。底盘紧固件的开发涉及到多个环节和关键技术&#xff0c;下面SunTorque智能扭矩系统将详细介绍底盘紧固件开发流程和关键技术。 一、底盘紧固件开发的…

舞台演出因全息纱幕投影有哪些新变化?

如今&#xff0c;随着时代的演进&#xff0c;我们对舞台体验的追求愈发深入&#xff0c;渴望在这片艺术天地中&#xff0c;感受到超越日常的震撼与感动&#xff0c;而这种追求&#xff0c;也正与现代技术的飞速发展不谋而合。其中&#xff0c;全息纱幕投影技术以其独特的魅力&a…

Mysql 基础 order by ,as ,limit,case,asc、desc

order by 、as 、limit 、asc&#xff08;ascending 正序 默认&#xff09; desc&#xff08;descending 倒序&#xff09; SELECT 学号, 姓名, 成绩, CASEWHEN 成绩 > 90 THEN 优秀WHEN 成绩 > 80 THEN 良好WHEN 成绩 > 60 THEN 及格ELSE 不及格 END as 成绩级别 FRO…

数组刷题集

文章目录 概要26. 删除有序数组中的重复项代码Python 189. 轮转数组代码Python 小结 概要 记录一些数组相关的刷题集。 数组数据结构早就写过了&#xff0c;一直没有写相关的刷题集。今天补上。 26. 删除有序数组中的重复项 leetcode26题 题目如上图&#xff1b;也可以去leet…

Vince9120雅思小作文笔记——P1 Intro(前言)

文章目录 链接P1 Intro&#xff08;前言&#xff09;字数限制题型综述&#xff08;problem types overview&#xff09;1. **柱状图&#xff08;Bar Chart&#xff09;** - 描述不同类别在某个或多个变量上的数据量比较。2. **线图&#xff08;Line Graph&#xff09;** - 展示…

【只显示某一层,其它层隐藏】- PCB板工艺及AD软件配置

在pcb文件视图下&#xff0c;按下字母L&#xff0c;弹出如下框&#xff0c; 选择view options 在single layer mode 勾选ON&#xff0c;就可以隐藏其他层 单层显示效果 方法二&#xff1a;shitfs快捷键

SH-PEG-SH,聚乙二醇二巯基广泛用于生物学应用、纳米技术和材料研究中

【试剂详情】 英文名称 SH-PEG-SH 中文名称 聚乙二醇二巯基&#xff0c;双硫醇PEG&#xff0c; 双巯基聚乙二醇&#xff0c;双巯基封端聚乙二醇 外观性状 白色固体粉末 分子量 0.4k&#xff0c;0.6k&#xff0c;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#x…