在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,表结构如下:# 3、向books表中插入记录 # 1)不指定字段名称,插入第一条记录 # 2)指定所有字段名…...
统计神经网络参数量、MAC、FLOPs等信息
0、基础提示 1、FLOPS是用来衡量硬件算力的指标,FLOPs用来衡量模型复杂度。 2、MAC 一般为 FLOPs的2倍 3、并非FLOPs越小在硬件上就一定运行更快,还与模型占用的内存,带宽,等有关 1、FLOPs计算 神经网络参数量。用于衡量模型大…...
【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力(CVPR2021)
文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文:Aligning Bag of Regions for Open-Vocabulary Object Detection 代码:https://github.com/wusize/ovdet…...
Ansible 自动化运维
目录 ansible 环境安装部署ansible 命令行模块inventory 主机清单 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可…...
指纹浏览器能为TikTok运营提供哪些便利?
TikTok是一个非常垂直的平台,每个账号的内容都应尽可能保持垂直,这样平台才会给予更多的流量。有运营经验的TikTok用户一般会经营多个账号,从而获取更多的收益。指纹浏览器作为一种新型浏览器,它的优势不可否认。那么指纹浏览器能…...
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍 | 龙蜥技术
编者按:传统以太网方案存在系统调用消耗大量时间、增加数据传输延时、对 CPU 造成很重的负担三个缺点,而 RDMA 技术可以解决以上三个缺点。那 RDMA 究竟是什么?它的方案的设计思路是什么?今天,浪潮信息驱动工程师刘伟带…...
【Boost搜索引擎项目】
文章目录 一、项目流程二、项目展示 一、项目流程 1.编写数据去标签模块–parser.cc 将去标签之后干净文档以title\3content\3url\ntitle\3content\3url\n格式放入同一文件中。 2.建立索引模块–index.hpp 读取处理好的行文本文件进行分词、权重计算等操作,在内存中…...
JVM入门篇-JVM的概念与学习路线
JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…...
“程序员求职攻略:IT技术岗面试的必备技巧“
文章目录 每日一句正能量前言分享面试IT公司的小技巧IT技术面试有哪些常见的问题?分享总结遇到过的面试题后记 每日一句正能量 人活一世,不在乎朋友多少,不问财富几车,关键看在你最困难的时候,是否有一个伸出援手的人&…...
回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测
回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-ELM鲸鱼算法优化极限学习机多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现WOA-ELM鲸鱼算法优化极限学习机多输入回归预测&#…...
方法的定义和格式
方法 什么是方法? 方法是程序中最小的执行单元 定义:把一些代码打包在一起,该过程称为方法 实际开发过程中,什么时候用到方法: 重复的代码,具有独立功能的代码可以抽取到方法中 实际开发中,方…...
【Linux】进程篇(补):简易 shell 的实现(进程深刻理解、内建命令的使用)
文章目录 makefilemybash.c 代码逻辑框架(重要的是,边写边查!) 命令行提示符,fflush 刷新显示获取 输入的 有效字符串,定义一个字符数组,用 fgets 从键盘上获取(注意处理命令行输入…...
django Ajax--前后端数据交互
一.Django的Ajax和JavaScript的Ajax Django的Ajax和JavaScript的Ajax实质上是指同一种技术,即异步JavaScript和XML(Asynchronous JavaScript and XML)。它允许在不刷新整个页面的情况下,通过前后端之间的异步交互来获取或发送数据…...
【嵌入式学习笔记】嵌入式入门1——GPIO
1.什么是GPIO General Purpose Input Output,即通用输入输出端口,简称GPIO,作用是负责采集外部器件的信息或者控制外部器件工作,即输入输出。 2.STM32 GPIO简介 2.1.GPIO特点 不同型号,IO口数量可能不一样&#x…...
[SQL挖掘机] - 多表连接: union
介绍: sql中的union是用于合并两个或多个select语句的结果集的操作符。它将多个查询的结果合并成一个结果集,并自动去除重复的行。请注意,union操作要求被合并的查询返回相同数量和类型的列。 用法: union的基本语法如下: select_stateme…...
AI面试官:SQL Server数据库(三)
AI面试官:SQL Server数据库(三) 当涉及到.NET工程师中关于SQL Server数据库的面试题时,主要考察候选人的数据库知识、SQL查询能力、数据库设计和优化等方面。 文章目录 AI面试官:SQL Server数据库(三)31. 数据库并发控制是什么?数据库有哪些常见的并发控制机制?32. 什…...
python刑事案卷图片转pdf
分两步,第一步是转图片,第二步是合并。 # -*- coding: utf-8 -*- import glob,os from PIL import Imagedef convert_to_pdf(path):# 打开图片文件img Image.open(path)# 将图片转换为 PDF,并保存到同名文件pdf_path os.path.splitext(path…...
vue使用driver.js完成页面引导的功能
需求:给客户做一个页面引导,教客户怎么做 效果: 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供电。 小文件:零拷贝技术 传输大文件:异步 IO 、直接 IO:如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io直接io (123条消息) Linux网络编程 | 彻底搞懂…...
从Linux内核list.h到用户态:侵入式单向链表的设计与实现
1. 项目概述:从内核到应用,list.h的降维打击如果你在Linux内核源码里泡过,或者看过一些高性能的开源项目,一定对list.h这个文件不陌生。它位于内核源码的include/linux/目录下,是一个用C语言实现的、精巧绝伦的通用双向…...
Barlow字体:54种样式打造专业级设计效果,提升你的视觉表达力
Barlow字体:54种样式打造专业级设计效果,提升你的视觉表达力 【免费下载链接】barlow Barlow: a straight-sided sans-serif superfamily 项目地址: https://gitcode.com/gh_mirrors/ba/barlow Barlow是一款源自加州公共视觉美学的专业字体家族&a…...
终极AI音乐创作工具:5分钟生成专业级歌曲翻唱
终极AI音乐创作工具:5分钟生成专业级歌曲翻唱 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen 你是否曾经梦想…...
用知识图谱重构搜索引擎
一、传统搜索:关键词的“机械匹配”时代你输入词,它找文档我们熟悉的搜索引擎,无论是早期的Google还是百度的首页,核心逻辑都是关键词匹配。你输入“苹果热量”,它就把互联网里包含“苹果”和“热量”两个词的网页抓出…...
【ElevenLabs广西话语音落地实战】:20年语音AI专家亲授3步绕过方言合成陷阱,97.3%自然度实测达标
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs广西话语音落地实战总览 ElevenLabs 官方尚未提供原生广西话(粤语邕浔片/平话混合语境)语音模型,但通过其 API 的自定义语音微调(Fine-tuning&…...
2026 Java面试真题库(基础+进阶+大厂场景题)
面试前期准备不充分其实就是对自己的不负责任,也是在浪费自己的时间,今天为大家整理了一份实战文档,让你系统性的弄懂架构师筑基内容:Linux 基础与进阶高性能 Netty 框架MySQL并发编程进阶JVM 性能调优Tomacat注意:以下…...
跟着 MDN 学CSS day_7:(层叠优先级与继承)
CSS的全称是层叠样式表(Cascading Style Sheets),其中"层叠"这个词绝非随意选用的。理解层叠、优先级和继承这三个核心概念,是真正掌握CSS的关键所在。当你发现某个样式没有按预期生效时,十有八九是这三个机…...
CSerialPort 4.3.2 保姆级集成指南:5分钟让你的QT/MFC/Electron项目拥有稳定串口功能
CSerialPort 4.3.2 全栈集成实战:从QT到Electron的跨平台串口方案 在工业控制、物联网设备调试和嵌入式系统开发中,串口通信作为最基础也最可靠的数据传输方式之一,至今仍发挥着不可替代的作用。然而,不同操作系统提供的串口API差…...
AMD Ryzen终极调优实战:SMUDebugTool免费工具完整配置指南
AMD Ryzen终极调优实战:SMUDebugTool免费工具完整配置指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
星露谷物语SMAPI模组加载器:从新手到专家的终极指南
星露谷物语SMAPI模组加载器:从新手到专家的终极指南 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 你是否曾梦想为星露谷物语添加全新的游戏体验?SMAPI模组加载器正是实现这…...
