工厂模式加策略模式 -- 具体实现

这里写目录标题

      • 定义接口
      • 定义抽象类
      • 定义主处理器
      • 分支处理器
      • 定义工厂
      • demo

在这里插入图片描述

定义接口

public interface EntityHandler extends InitializingBean {MatchContentDTO match(MatchEntityDTO matchEntityDTO);String supportEntityType();
}

定义抽象类

public abstract class AbstractEntityHandler implements EntityHandler {@Overridepublic final MatchContentDTO match(MatchEntityDTO matchEntityDTO) {EntityHandler specialMatchHandler = getSpecialMatchHandler(matchEntityDTO);if (specialMatchHandler != null) {return specialMatchHandler.match(matchEntityDTO);}return doCommonMatch(matchEntityDTO);}public abstract MatchContentDTO doCommonMatch(MatchEntityDTO matchEntityDTO);public EntityHandler getSpecialMatchHandler(MatchEntityDTO matchEntityDTO) {return null;}}

定义主处理器


@Service
@Slf4j
public class EntitySystemHandler extends AbstractEntityHandler {@Overridepublic MatchContentDTO doCommonMatch(MatchEntityDTO matchEntityDTO) {log.info("EntitySystemHandler:{}", JSON.toJSONString(matchEntityDTO));return new MatchContentDTO();}@Overridepublic String supportEntityType() {return this.getClass().getName();}@Overridepublic void afterPropertiesSet() throws Exception {EntityFactory.register(this);}@Overridepublic EntityHandler getSpecialMatchHandler(MatchEntityDTO matchEntityDTO) {return super.getSpecialMatchHandler(matchEntityDTO);}
}

分支处理器

@Service
@Slf4j
public class TimeEntityHandler extends AbstractEntityHandler {@Overridepublic String supportEntityType() {return  this.getClass().getName();}@Overridepublic MatchContentDTO doCommonMatch(MatchEntityDTO matchEntityDTO) {log.info("TimeEntityHandler:{}", JSON.toJSONString(matchEntityDTO));return new MatchContentDTO();}@Overridepublic void afterPropertiesSet() throws Exception {EntityFactory.register(this);}
}

定义工厂

public class EntityFactory{private static final Map<String, EntityHandler> ENTITY_HANDLER_MAP = new HashMap<>();public static EntityHandler getEntityHandler(String entityType){return ENTITY_HANDLER_MAP.get(entityType);}public static void register(EntityHandler handler) {if (handler == null) {return;}ENTITY_HANDLER_MAP.put(handler.supportEntityType(), handler);}}

demo


@SpringBootTest
@RunWith(SpringRunner.class)
public class EntityTest {@Testpublic  void  getTest(){EntityHandler entityHandler = EntityFactory.getEntityHandler("system");MatchEntityDTO matchEntityDTO = new MatchEntityDTO();entityHandler.match(matchEntityDTO);}
}

在这里插入图片描述

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

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

相关文章

基于Spring Boot的网上宠物店系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

PHPCMS V9 登录加密改造

要改造 phpcms 的后台登录&#xff0c;使其前端使用加密方式提交&#xff0c;后端解密&#xff0c;你可以采用 RSA 非对称加密 或 AES 对称加密 方式来增强安全性。 方案设计 前端加密 生成公私钥对&#xff08;推荐使用 RSA&#xff09;。前端使用公钥加密密码&#xff0c;然…

LeetCode 滑动数组统计+至少 2962. 统计最大元素出现至少 K 次的子数组

2962. 统计最大元素出现至少 K 次的子数组 给你一个整数数组 nums 和一个 正整数 k 。 请你统计有多少满足 「 nums 中的 最大 元素」至少出现 k 次的子数组&#xff0c;并返回满足这一条件的子数组的数目。 子数组是数组中的一个连续元素序列。 示例 1&#xff1a; 输入&#…

FANUC机器人几种常用的通讯网络及接口

FANUC机器人几种常用的通讯网络及接口 Devicenet 网络通讯接口&#xff0c;接口为5针线 (规定用的机架为 81-84&#xff09; PROFIBUS 网络通讯接口&#xff0c;针脚为2针&#xff08;规定用的机架为 67&#xff09; Intemet 网络通讯接口&#xff08;常用的网线接口&#xf…

CentOS8+Zabbix7.2.4解决中文显示问题

#cd /usr/share/zabbix/ui/include/ #grep graphfont defines.inc.php define(‘ZBX_GRAPH_FONT_NAME’, ‘graphfont’); // font file name define(‘ZBX_FONT_NAME’, ‘graphfont’); #ll /usr/share/zabbix/ui/assets/fonts/graphfont.ttf lrwxrwxrwx. 1 root root 36 3…

AI自动化编程初探

先说vscodeclinemodelscope方案&#xff0c;后面体验trae或者cursor再写写其它的。vscode和trae方案目前来说是免费的&#xff0c;cursor要用claud需要付费&#xff0c;而且不便宜&#xff0c;当然效果可能是最好的。 vscode方案&#xff0c;我的经验是最好在ubuntu上&#xff…

101.在 Vue 3 + OpenLayers 使用 declutter 避免文字标签重叠

1. 前言 在使用 OpenLayers 进行地图开发时&#xff0c;我们经常需要在地图上添加点、线、区域等图形&#xff0c;并给它们附加文字标签。但当地图上的标注较多时&#xff0c;文字标签可能会发生重叠&#xff0c;导致用户无法清晰地查看地图信息。 幸运的是&#xff0c;OpenL…

18天 - 常见的 HTTP 状态码有哪些?HTTP 请求包含哪些内容,请求头和请求体有哪些类型?HTTP 中 GET 和 POST 的区别是什么?

常见的 HTTP 状态码有哪些&#xff1f; HTTP 状态码用于指示服务器对客户端请求的响应结果&#xff0c;常见的 HTTP 状态码可以分为以下几类&#xff1a; 1. 信息类&#xff08;1xx&#xff09; 100 Continue&#xff1a;客户端应继续发送请求。101 Switching Protocols&…

IXTUR气控永磁铁:以高精度气控和稳定磁场,为机器人应用提供稳定抓取力

在现代工业生产和物流领域&#xff0c;物料的抓取与搬运是影响生产效率和成本控制的重要环节。传统夹爪在面对不同材质、形状和重量的物体时&#xff0c;常常存在适应性差、抓取不稳定、操作复杂等问题&#xff0c;导致生产流程中频繁出现停机调整&#xff0c;增加了人工干预成…

江科大51单片机笔记【16】AD/DA转换(下)

写在前言 此为博主自学江科大51单片机&#xff08;B站&#xff09;的笔记&#xff0c;方便后续重温知识 在后面的章节中&#xff0c;为了防止篇幅过长和易于查找&#xff0c;我把一个小节分成两部分来发&#xff0c;上章节主要是关于本节课的硬件介绍、电路图、原理图等理论知识…

【C++】 —— 笔试刷题day_4

刷题day_4 继续加油&#xff01;&#xff01;&#xff01; 一、Fibonacci数列 题目链接&#xff1a;Fibonacci数列 题目解析 题目要求&#xff0c;输入一个数N&#xff0c;我们可以对N进行1/-1操作&#xff1b;题目让我们输出对N进行至少多少步可以变成Fibonacci数。 这里题目…

IP层之分片包的整合处理---BUG修复

在之前章节中&#xff0c;笔者就IP层之分片包的整合处理进行了概念介绍&#xff0c;以及代码编写和仿真&#xff0c;在整体代码调试环节&#xff0c;笔者发现了一个问题&#xff0c;在本文中&#xff0c;笔者将就这个BUG进行说明&#xff0c;以及进行修复&#xff0c;讲解代码实…

修复Electron项目Insecure Content-Security-Policy(内容安全策略CSP)警告的问题

将以下代码粘贴进html的<header>标签内 <metahttp-equiv"Content-Security-Policy"content"default-src self; style-src self unsafe-inline; img-src self data:; "> 解释一下上面代码中的属性含义 default-src self&#xff1a;配置加载策…

linux 的免密切换用户PAM配置

/etc/pam.d/su是Linux系统中与用户切换&#xff08;su命令&#xff09;相关的PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;配置文件。以下是对它的详细介绍&#xff1a; 简介 作用 PAM是一种用于管理系统认证的机制&#xff0c;…

pyspark 数据处理的三种方式RDD、DataFrame、Spark SQL案例

目录 一、浅语二、三种数据处理方式比较2.1 RDD2.2 DataFrame2.3 Spark SQL 三、三种方法的创建方式3.1 创建RDD3.2 创建DataFrame3.2.1 创建sqlContext3.2.2 定义Schema3.2.3 创建DataFrame 3.3 创建SparkSQL3.3.1 登录临时表3.3.2 使用sparkSQL 四、三种方法显示部分字段4.1 …

文件解析漏洞靶机---- 练习通关攻略

1.安装靶机 点击 hackme.ova 文件&#xff0c;直接导入虚拟机&#xff0c;选择存储位置 2. 开启靶机 3. kali扫描同C段的ip&#xff0c;找到靶机ip nmap 192.168.182.1/24 经判断&#xff0c;靶机ip为&#xff1a;192.168.182.157 开启端口 http 80 、ssh 远程连接 22 4…

信号处理抽取多项滤波的数学推导与仿真

昨天的《信号处理之插值、抽取与多项滤波》&#xff0c;已经介绍了插值抽取的多项滤率&#xff0c;今天详细介绍多项滤波的数学推导&#xff0c;并附上实战仿真代码。 一、数学变换推导 1. 多相分解的核心思想 将FIR滤波器的系数 h ( n ) h(n) h(n)按相位分组&#xff0c;每…

【大模型基础_毛玉仁】2.3 基于 Encoder-only 架构的大语言模型

更多内容&#xff1a;XiaoJ的知识星球 目录 2.3 基于Encoder-only 架构的大语言模型2.3.1 Encoder-only 架构2.3.2 BERT 语言模型1&#xff09;BERT 模型结构2&#xff09;BERT 预训练方式3&#xff09;BERT 下游任务 2.3.3 BERT 衍生语言模型1&#xff09;RoBERTa 语言模型2&a…

AIP-165 按条件删除

编号165原文链接https://google.aip.dev/165状态批准创建日期2019-12-18更新日期2019-12-18 有时API需要提供一种机制&#xff0c;按照一些过滤参数删除大量资源&#xff0c;而非提供待删除的各资源名字。 这是一个稀有的场景&#xff0c;用于用户一次性删除数千或更多资源的…

【Maven教程与实战案例】

文章目录 前言一、Maven是什么&#xff1f;二、Maven的安装与配置1. 安装前置条件2. 下载与配置 Maven3. 验证安装 三、Maven的核心概念1. POM.xml 文件2. 构建生命周期与插件机制 四、实战项目示例1. 项目目录结构2. 编写代码App.javaAppTest.java 3. 构建项目4. 运行项目 前言…