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

在springboot项目中使用策略工厂模式

在springboot项目中使用策略工厂模式

策略接口类

package cn.test.ext;public interface ITestStrategy {void execTestMethod();
}

策略实现类

package cn.test.ext.beanlife;import cn.test.ext.ITestStrategy;
import cn.test.ext.MyStrategyFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;/*** InitializingBean* 实现该接口,你的bean可以在 spring容器初始化当前bean时 执行自定义逻辑** 必须在afterPropertiesSet方法里写你自定义的执行逻辑*/
@Slf4j
@Component
public class TestInitializingBean implements ITestStrategy, InitializingBean {private static String str ;//实现InitializingBean接口,必须重写afterPropertiesSet方法//这样当springboot启动加载TestInitializingBean时,会自动执行里边的afterPropertiesSet方法@Overridepublic void afterPropertiesSet() throws Exception {//本方法里可以做一些初始化的操作,如设置类静态变量值 / 将类注册到策略工厂/ 执行一些其他方法或动作/...//设置类静态变量值str = "qwe123!";//将k1策略 (本类) 注册到 策略工厂里MyStrategyFactory.register("k1",this);log.info("注册了策略:{}到策略工厂里",this);}@Overridepublic void execTestMethod() {log.info("start----执行k1策略...");System.err.println(str);}
}

策略工厂类


package cn.test.ext;import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** 策略工厂*/
@Component
@Slf4j
public class MyStrategyFactory {private static Map<String, ITestStrategy> strategyMap = new ConcurrentHashMap<>();/*** 将每个策略注册到策略工厂** 利用策略类里的 InitializingBean 的afterPropertiesSet方法,* 来把策略类初始化到StrategyFactory 策略工厂里** @param strategyCode String* @param itemStrategy IPersonAddrSimilarComputeHandleStrategy*/public static void register(String strategyCode, ITestStrategy itemStrategy) {strategyMap.put(strategyCode, itemStrategy);}/*** 从策略工厂取出需要的策略* @param key* @return*/public static ITestStrategy getReceiptHandleStrategy(String key) {for (String strate : strategyMap.keySet()) {if (StrUtil.equals(strate, key)) {//按key取出对应的策略类,来执行处理策略ITestStrategy strategy = strategyMap.get(key);log.info("拿到了策略:{}", strategy.getClass().getName());return strategy;}}log.info("没拿到对应的策略类,不存在 策略:{}", key);return null;}
}

策略上下文类

package cn.test.ext;import org.springframework.stereotype.Component;@Component
public class MyStrategyContext {private ITestStrategy iTestStrategy;//1.按key get某个策略类public void getStrategyInstance(String key) {ITestStrategy strategyInstance = MyStrategyFactory.getReceiptHandleStrategy(key);this.iTestStrategy = strategyInstance;}//2.通过context执行该策略类里的方法public void execMethod(){if (iTestStrategy!=null){iTestStrategy.execTestMethod();}}
}

相关文章:

在springboot项目中使用策略工厂模式

在springboot项目中使用策略工厂模式 策略接口类 package cn.test.ext;public interface ITestStrategy {void execTestMethod(); }策略实现类 package cn.test.ext.beanlife;import cn.test.ext.ITestStrategy; import cn.test.ext.MyStrategyFactory; import lombok.exter…...

mysql综合练习语法总结

mysql综合练习 用于 小白练手的主要用于以后语法忘了回来看 题目 # 1、创建数据库test01_library # 2、创建表 books&#xff0c;表结构如下&#xff1a;# 3、向books表中插入记录 # 1&#xff09;不指定字段名称&#xff0c;插入第一条记录 # 2&#xff09;指定所有字段名…...

统计神经网络参数量、MAC、FLOPs等信息

0、基础提示 1、FLOPS是用来衡量硬件算力的指标&#xff0c;FLOPs用来衡量模型复杂度。 2、MAC 一般为 FLOPs的2倍 3、并非FLOPs越小在硬件上就一定运行更快&#xff0c;还与模型占用的内存&#xff0c;带宽&#xff0c;等有关 1、FLOPs计算 神经网络参数量。用于衡量模型大…...

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力(CVPR2021)

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文&#xff1a;Aligning Bag of Regions for Open-Vocabulary Object Detection 代码&#xff1a;https://github.com/wusize/ovdet…...

Ansible 自动化运维

目录 ansible 环境安装部署ansible 命令行模块inventory 主机清单 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可…...

指纹浏览器能为TikTok运营提供哪些便利?

TikTok是一个非常垂直的平台&#xff0c;每个账号的内容都应尽可能保持垂直&#xff0c;这样平台才会给予更多的流量。有运营经验的TikTok用户一般会经营多个账号&#xff0c;从而获取更多的收益。指纹浏览器作为一种新型浏览器&#xff0c;它的优势不可否认。那么指纹浏览器能…...

关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术

编者按&#xff1a;传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点&#xff0c;而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么&#xff1f;它的方案的设计思路是什么&#xff1f;今天&#xff0c;浪潮信息驱动工程师刘伟带…...

【Boost搜索引擎项目】

文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作&#xff0c;在内存中…...

JVM入门篇-JVM的概念与学习路线

JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境&#xff08;java 二进制字节码的运行环境&#xff09; 好处 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…...

“程序员求职攻略:IT技术岗面试的必备技巧“

文章目录 每日一句正能量前言分享面试IT公司的小技巧IT技术面试有哪些常见的问题&#xff1f;分享总结遇到过的面试题后记 每日一句正能量 人活一世&#xff0c;不在乎朋友多少&#xff0c;不问财富几车&#xff0c;关键看在你最困难的时候&#xff0c;是否有一个伸出援手的人&…...

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测

回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…...

方法的定义和格式

方法 什么是方法&#xff1f; 方法是程序中最小的执行单元 定义&#xff1a;把一些代码打包在一起&#xff0c;该过程称为方法 实际开发过程中&#xff0c;什么时候用到方法&#xff1a; 重复的代码&#xff0c;具有独立功能的代码可以抽取到方法中 实际开发中&#xff0c;方…...

【Linux】进程篇(补):简易 shell 的实现(进程深刻理解、内建命令的使用)

文章目录 makefilemybash.c 代码逻辑框架&#xff08;重要的是&#xff0c;边写边查&#xff01;&#xff09; 命令行提示符&#xff0c;fflush 刷新显示获取 输入的 有效字符串&#xff0c;定义一个字符数组&#xff0c;用 fgets 从键盘上获取&#xff08;注意处理命令行输入…...

django Ajax--前后端数据交互

一.Django的Ajax和JavaScript的Ajax Django的Ajax和JavaScript的Ajax实质上是指同一种技术&#xff0c;即异步JavaScript和XML&#xff08;Asynchronous JavaScript and XML&#xff09;。它允许在不刷新整个页面的情况下&#xff0c;通过前后端之间的异步交互来获取或发送数据…...

【嵌入式学习笔记】嵌入式入门1——GPIO

1.什么是GPIO General Purpose Input Output&#xff0c;即通用输入输出端口&#xff0c;简称GPIO&#xff0c;作用是负责采集外部器件的信息或者控制外部器件工作&#xff0c;即输入输出。 2.STM32 GPIO简介 2.1.GPIO特点 不同型号&#xff0c;IO口数量可能不一样&#x…...

[SQL挖掘机] - 多表连接: union

介绍: sql中的union是用于合并两个或多个select语句的结果集的操作符。它将多个查询的结果合并成一个结果集&#xff0c;并自动去除重复的行。请注意&#xff0c;union操作要求被合并的查询返回相同数量和类型的列。 用法: union的基本语法如下&#xff1a; select_stateme…...

AI面试官:SQL Server数据库(三)

AI面试官:SQL Server数据库(三) 当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 文章目录 AI面试官:SQL Server数据库(三)31. 数据库并发控制是什么?数据库有哪些常见的并发控制机制?32. 什…...

python刑事案卷图片转pdf

分两步&#xff0c;第一步是转图片&#xff0c;第二步是合并。 # -*- coding: utf-8 -*- import glob,os from PIL import Imagedef convert_to_pdf(path):# 打开图片文件img Image.open(path)# 将图片转换为 PDF&#xff0c;并保存到同名文件pdf_path os.path.splitext(path…...

vue使用driver.js完成页面引导的功能

需求&#xff1a;给客户做一个页面引导&#xff0c;教客户怎么做 效果&#xff1a; driverjs官方文档 一.安装driver.js # Using npm npm install driver.js# Using pnpm pnpm install driver.js# Using yarn yarn add driver.js 二.在自己需要引导的页面上引入driver.js i…...

学习中遇到的好博客

c日志工具之——log4cpp ECU唤醒的本质就是给ECU供电。 小文件&#xff1a;零拷贝技术 传输大文件&#xff1a;异步 IO 、直接 IO&#xff1a;如何高效实现文件传输&#xff1a;小文件采用零拷贝、大文件采用异步io直接io (123条消息) Linux网络编程 | 彻底搞懂…...

LiveTalking 部署踩坑笔记

目录 版本特点&#xff1a; tts方案&#xff1a; musetalk方案 一、先确认&#xff1a;1985 端口有没有在监听 Windows&#xff1a; Linux&#xff1a; 报错&#xff1a;SyntaxError: ( was never closed 版本特点&#xff1a; 日常开发 / 测试 / 本地实时 Demo → Wav2…...

模型剪枝实战指南(一):从原理到落地

1. 模型剪枝的本质&#xff1a;为什么能剪&#xff1f; 我第一次接触模型剪枝时&#xff0c;最困惑的问题是&#xff1a;神经网络训练出来的参数不都是有用的吗&#xff1f;凭什么能随便删&#xff1f;后来在移动端部署ResNet模型时才发现&#xff0c;原来大多数神经网络都存在…...

从原理到实战:位运算巧解最小码距(附完整代码)

1. 什么是码距&#xff1f;从生活场景理解概念 第一次听到"码距"这个词时&#xff0c;我脑海里浮现的是超市货架上相似商品间的距离。后来才发现&#xff0c;在计算机世界里&#xff0c;它描述的是两个编码之间的差异程度。举个生活中的例子&#xff1a;假设我们用5…...

Z-Image-Turbo LoRA Web服务安全加固:禁用前端覆盖负面提示+后端content policy双层防护

Z-Image-Turbo LoRA Web服务安全加固&#xff1a;禁用前端覆盖负面提示后端content policy双层防护 1. 项目概述与安全挑战 造相-Z-Image-Turbo 亚洲美女LoRA Web服务是一个基于Z-Image-Turbo模型的图片生成平台&#xff0c;集成了laonansheng/Asian-beauty-Z-Image-Turbo-To…...

重装系统后的环境快速恢复:包含BERT模型部署的自动化脚本

重装系统后的环境快速恢复&#xff1a;包含BERT模型部署的自动化脚本 重装系统&#xff0c;对开发者来说&#xff0c;就像一场“数字大扫除”。清爽是清爽了&#xff0c;但看着空空如也的终端和待部署的一长串服务列表&#xff0c;那种从头再来的疲惫感瞬间涌上心头。尤其是当…...

手把手教你用ENA-TDR实测USB3.0线:阻抗、延时、串扰一个不漏

深度解析USB3.0线缆全参数测试&#xff1a;从TDR原理到实战报告解读 在高速数据传输领域&#xff0c;一根优质USB3.0线缆的价值往往被严重低估。当工程师们为系统稳定性问题焦头烂额时&#xff0c;很少有人会想到问题可能出在那根不起眼的连接线上。事实上&#xff0c;根据行业…...

5分钟掌握:billd-desk跨平台远程控制高效解决方案

5分钟掌握&#xff1a;billd-desk跨平台远程控制高效解决方案 【免费下载链接】billd-desk 基于Vue3 WebRTC Nodejs Flutter搭建的远程桌面控制 项目地址: https://gitcode.com/gh_mirrors/bi/billd-desk 还在为远程办公的卡顿和限制而烦恼吗&#xff1f;当你急需远程…...

zynq7020 u-boot 外设配置实战指南

1. Zynq7020 U-Boot外设配置概述 在嵌入式系统开发中&#xff0c;U-Boot作为系统启动加载器扮演着关键角色。对于Xilinx Zynq-7020平台来说&#xff0c;正确配置U-Boot外设是确保系统正常启动和运行的基础。本文将重点介绍网口、QSPI Flash和eMMC这三个核心外设的配置方法。 为…...

仙侠H5手游【九州封魔劫代金券内购版】服务端图文搭建教程(含资源下载+部署过程)

游戏截图搭建环境信息 系统&#xff1a;Centos 7.6 内存&#xff1a;4G 处理器&#xff1a;2核 注意事项 复制代码需要通过浏览器打开文章才不会报错 搭建资源获取 百度网盘&#xff1a;https://pan.baidu.com/s/1wmz7RegQGBaNrYYVbuJqgg?pwdkdn4 解压密码&#xff1a;www.won…...

从FamNet到通用计数:小样本学习如何让AI“数”遍万物

1. 小样本计数的革命&#xff1a;从专用工具到通用能力 记得我第一次接触物体计数任务时&#xff0c;用的还是专门针对人群计数的模型。当时为了统计商场人流量&#xff0c;不得不专门训练一个模型。后来遇到统计停车场的需求&#xff0c;又要重新收集数据训练新模型。这种&quo…...