当前位置: 首页 > news >正文

工厂模式+策略模式

输入实体

基类

import lombok.Data;@Data
public class PersonInputDto {private Integer id;private String name;
}

子类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ManPerson extends PersonInputDto {private String sex;
}@Data
@AllArgsConstructor
@NoArgsConstructor
public class WomenPerson extends PersonInputDto {private String sex;
}

创建抽象接口

接口

public interface Person {Object query(PersonInputDto inputDto);Integer getType();
}

抽象具体实现

@Component
public class ManHandle implements Person {@Overridepublic Object query(PersonInputDto inputDto) {if (inputDto instanceof ManPerson) {ManPerson manPerson = (ManPerson) inputDto;manPerson.setId(1);manPerson.setSex("男");manPerson.setName("name1");return manPerson;}return null;}@Overridepublic Integer getType() {return 1;}
}
@Component
public class WomenHandle implements Person {@Overridepublic Object query(PersonInputDto inputDto) {if (inputDto instanceof WomenPerson) {WomenPerson womenPerson = (WomenPerson) inputDto;womenPerson.setId(2);womenPerson.setSex("女");womenPerson.setName("name2");return womenPerson;}return null;}@Overridepublic Integer getType() {return 2;}
}

两种方式创建工厂

创建工厂1

import com.alibaba.fastjson.JSON;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;@Component
public class MainTestFactory implements ApplicationListener<ApplicationReadyEvent> {private static final Map<Integer, Person> handlerMap = new HashMap<>();public Person getAccountModel(Integer type) {return handlerMap.get(type);}@Overridepublic void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {Collection<Person> values = applicationReadyEvent.getApplicationContext().getBeansOfType(Person.class).values();values.forEach(value -> handlerMap.put(value.getType(), value));System.out.println("handlerMap ===> " + JSON.toJSONString(handlerMap));}
}

创建工厂2

import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Component
public class MainTestFactory2 {@Resourceprivate List<Person> personList;private static final Map<Integer, Person> handlerMap = new HashMap<>();public Person getAccountModel(Integer type) {return handlerMap.get(type);}@PostConstructpublic void init() {personList.forEach(value -> handlerMap.put(value.getType(), value));System.out.println("handlerMap ===> " + JSON.toJSONString(handlerMap));}
}

服务调用

@RestController
@RequestMapping({"/", ""})
public class DemoController {@Resourceprivate MainTestFactory factory;@Resourceprivate MainTestFactory2 mainTestFactory2;@PostMapping("/test")@ResponseBody@ApiOperation("test")public String test() {ManPerson query = (ManPerson) factory.getAccountModel(1).query(new ManPerson());System.out.println(JSON.toJSONString(query));ManPerson query1 = (ManPerson) factory.getAccountModel(2).query(new ManPerson());System.out.println(query1);WomenPerson query2 = (WomenPerson) mainTestFactory2.getAccountModel(2).query(new WomenPerson());return JSON.toJSONString(query2);}}

相关文章:

工厂模式+策略模式

输入实体 基类 import lombok.Data;Data public class PersonInputDto {private Integer id;private String name; }子类 Data AllArgsConstructor NoArgsConstructor public class ManPerson extends PersonInputDto {private String sex; }Data AllArgsConstructor NoArgs…...

TMS320F28335学习笔记-时钟系统

第一次使用38225使用了普中的clocksystem例程进行编译&#xff0c;总是编译失败。 问题一&#xff1a;提示找不到文件 因为工程的头文件路径没有包含&#xff0c;下图的路径需要添加自己电脑的路径。 问题二 找不到库文件 例程种的header文件夹和common文件夹不知道从何而来…...

【Apache POI】Apache POI-操作Excel表格-简易版

Catalog Apache POI-操作Excel表格1. 需求2. 优点3. 缺点4. 应用场景5. 使用方法6. SpringBoot工程中处理Excel表格7. Demo示例 Apache POI-操作Excel表格 1. 需求 大多数项目的在运营过程中&#xff0c;会产生运营数据&#xff0c;如外卖系统中需要统计每日的订单完成数、每…...

MySQL系列之索引

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…...

【问题分析】锁屏界面调起google语音助手后壁纸不可见【Android 14】

1 问题描述 为系统和锁屏分别设置两张不同的壁纸&#xff0c;然后在锁屏界面长按Power调起google语音助手后&#xff0c;有时候会出现壁纸不可见的情况&#xff0c;如以下截图所示&#xff1a; 有的时候又是正常的&#xff0c;但显示的也是系统壁纸&#xff0c;并非是锁屏壁纸…...

Java入门基础学习笔记8——注释

1、注释&#xff1a; 注释是写在程序中对代码进行解释说明的文件&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。 package cn.ensource.note;/**文档注释文档注释 */ public class NoteDemo {public static void main(String[] args) {// 单行注释System.out.…...

上班工资太低了,哪些副业可以多赚钱?

今天给各位分享最赚钱的副业方式的知识&#xff0c;其中也会对比较赚钱的副业进行解释. 1、网站接单 一般20页左右的PPT报价基本在200-400元。如果能每周接单&#xff0c;一个月就有接近1000元的副业收入。提交摄影和绘画作品 比起画画&#xff0c;靠摄影赚点外快更容易一点。…...

原子学习笔记4——GPIO 应用编程

一、应用层如何操控 GPIO 与 LED 设备一样&#xff0c;GPIO 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/gpio 目录下&#xff0c;如下所示&#xff1a; gpiochipX&#xff1a;当前 SoC 所包含的 GPIO 控制器&#xff0c;我们知道 I.MX6UL/I.MX6ULL 一共包…...

查看iqn编码

cat /etc/iscsi/initiatorname.iscsi ## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames. InitiatorNameiqn.2004-10.com.ubuntu:01:9ebe1a68...

如何安全的使用密码登录账号(在不知道密码的情况下)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具&#xff0c;进入账号密码模块&#xff0c;如图 2、看到鼠标移动到密码那一栏有提示&#xff0c;按住Ctrl或者Alt点击或者双击就能复制内容&…...

软件需求和设计评审

目录 引言 1. 软件评审的方法和技术 2. 产品需求评审&#xff1a;构建正确的产品 3. 设计评审&#xff1a;构建正确的产品 4. 软件评审的最佳实践 结语 引言 在软件开发的迷宫中&#xff0c;需求和设计评审是通往成功产品的关键门户。它们是确保软件质量和满足用户需求的…...

论文笔记ColdDTA:利用数据增强和基于注意力的特征融合进行药物靶标结合亲和力预测

ColdDTA发表在Computers in Biology and Medicine 的一篇一区文章 突出 • 数据增强和基于注意力的特征融合用于药物靶点结合亲和力预测。 • 与其他方法相比&#xff0c;它在 Davis、KIBA 和 BindingDB 数据集上显示出竞争性能。 • 可视化模型权重可以获得可解释的见解。 …...

如何防止WordPress网站内容被抓取

最近在检查网站服务器的访问日志的时候&#xff0c;发现了大量来自同一个IP地址的的请求&#xff0c;用站长工具分析确认了我的网站内容确实是被他人的网站抓取了&#xff0c;我第一时间联系了对方网站的服务器提供商投诉了该网站&#xff0c;要求对方停止侵权行为&#xff0c;…...

全球化战略中的技术支柱:出海企业的网络技术解决方案

随着全球市场的一体化&#xff0c;中国的电商与游戏行业越来越倾向于扩展国际市场&#xff0c;这一过程被称为“出海”。成功的出海战略不仅需要强大的市场洞察和文化适应能力&#xff0c;还需依赖高效的网络技术&#xff0c;包括SOCKS5代理、代理IP、以及全面的网络安全策略。…...

在Linux上安装并运行RabbitMQ

目录 准备CentOS服务器 下载rabbit-server和erlang文件 启动RabbitMQ服务 准备CentOS服务器 两个命令&#xff0c;选一个能用的&#xff0c;查看CentOS服务器的版本 lsb_release -a下载rabbit-server和erlang文件 参考文章&#xff1a;http://t.csdnimg.cn/t8BbM 1、创建新…...

使用 docker-compose 搭建个人博客 Halo

说明 我这里使用的是 Halo 作为博客的工具&#xff0c;毕竟是开源了&#xff0c;也是使用 Java 写的嘛&#xff0c;另外一点就是使用 docker 来安装&#xff08;自动挡&#xff0c;不用自己考虑太多的环境因素&#xff09;&#xff0c;这样子搭建起来更快一点&#xff0c;我们…...

《这就是ChatGPT》读书笔记

书名&#xff1a;这就是ChatGPT 作者&#xff1a;[美] 斯蒂芬沃尔弗拉姆&#xff08;Stephen Wolfram&#xff09; ChatGPT在做什么&#xff1f; ChatGPT可以生成类似于人类书写的文本&#xff0c;它基本任务是弄清楚如何针对它得到的任何文本产生“合理的延续”。当ChatGPT写…...

更专业的汽车软件研发工具链,怿星重磅发布新产品

怿星科技在2024北京国际车展同期举办主题为“创新引领未来——聚焦智能汽车软件新基建”的新产品发布会&#xff0c;重磅推出1款绝对优势产品和4套场景解决方案。同时举行了4场热点技术研讨&#xff1a;国产工具链的机遇与挑战、新架构下的的车载DDS应用探索及测试方案介绍、软…...

Stable Diffusion:AI绘画的新纪元

摘要&#xff1a; Stable Diffusion&#xff08;SD&#xff09;作为AI绘画领域的新星&#xff0c;以其开源免费、强大的生成能力和高度的自定义性&#xff0c;正在引领一场艺术与技术的革命。本文旨在为读者提供Stable Diffusion的全面介绍&#xff0c;包括其原理、核心组件、安…...

有5个excel表,每个表有6列。用python把这5个表合成1个表。

要将五个Excel表格合并成一个表格&#xff0c;我们可以使用pandas库&#xff0c;它提供了一个简单且强大的方式来处理和分析数据。下面是一个步骤说明和示例代码&#xff1a; 步骤&#xff1a; 安装pandas和openpyxl&#xff08;如果你还没有安装的话&#xff09;&#xff1a…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...