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

spring 枚举、策略模式、InitializingBean初使化组合使用示例

实现一个简单的文本处理系统。
在这个系统中,我们将定义不同类型的文本处理策略,比如大小写转换、添加前缀后缀等,并使用工厂模式来管理这些策略。

1 定义一个枚举来标识不同的文本处理类型

public enum TextProcessTypeEnum {UPPER_CASE,LOWER_CASE,PREFIX_SUFFIX// 可以继续添加更多的文本处理类型
}


2 定义一个策略接口,所有的文本处理策略都将实现这个接口

public interface TextProcessHandler {public String process(String txt);public TextProcessTypeEnum getHandlerType();
}


3 实现几个具体的策略类

import org.springframework.stereotype.Service;@Service
public class UpperCaseHandler implements TextProcessHandler {@Overridepublic String process(String txt) {return txt.toUpperCase();}@Overridepublic TextProcessTypeEnum getHandlerType() {return TextProcessTypeEnum.UPPER_CASE;}
}@Service
public class LowerCaseHandler implements TextProcessHandler {@Overridepublic String process(String txt) {return txt.toLowerCase();}@Overridepublic TextProcessTypeEnum getHandlerType() {return TextProcessTypeEnum.LOWER_CASE;}
}@Service
@NoArgsConstructor
public class PrefixSuffixHandler implements TextProcessHandler {@Value("start--")private String prefix;@Value("--end")private String suffix;public PrefixSuffixHandler(String prefix, String suffix) {this.prefix = prefix;this.suffix = suffix;}@Overridepublic String process(String txt) {return prefix +txt+ suffix;}@Overridepublic TextProcessTypeEnum getHandlerType() {return TextProcessTypeEnum.PREFIX_SUFFIX;}
}


4 创建一个工厂类来管理这些策略

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Component
public class TextProcessHandlerFactory implements InitializingBean {@Autowiredprivate List<TextProcessHandler> textProcessHandlerList;private final Map<TextProcessTypeEnum, TextProcessHandler> handlerMap =new HashMap<>();@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("textProcessHandlerList = " + textProcessHandlerList);for (TextProcessHandler handler : textProcessHandlerList) {handlerMap.put(handler.getHandlerType(), handler);}System.out.println("handlerMap = " + handlerMap);}public TextProcessHandler getHandler(TextProcessTypeEnum typeEnum){return handlerMap.get(typeEnum);}
}


5 使用这个工厂来获取相应的处理器,并处理文本

@SpringBootTest
class DemoMvnTest1ApplicationTests {@Autowiredprivate TextProcessHandlerFactory factory;@Testvoid contextLoads() {TextProcessHandler handler = factory.getHandler(TextProcessTypeEnum.UPPER_CASE);System.out.println(handler.process("hello world"));System.out.println();handler = factory.getHandler(TextProcessTypeEnum.LOWER_CASE);System.out.println(handler.process("HELLO WORLD"));System.out.println();handler = factory.getHandler(TextProcessTypeEnum.PREFIX_SUFFIX);System.out.println(handler.process("hello world"));}}

相关文章:

spring 枚举、策略模式、InitializingBean初使化组合使用示例

实现一个简单的文本处理系统。 在这个系统中&#xff0c;我们将定义不同类型的文本处理策略&#xff0c;比如大小写转换、添加前缀后缀等&#xff0c;并使用工厂模式来管理这些策略。 1 定义一个枚举来标识不同的文本处理类型 public enum TextProcessTypeEnum {UPPER_CASE,LO…...

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC 1.1 定义&#xff08;同步串行半双工通信总线&#xff09; IIC&#xff08;Inter-Integrated Circuit&#xff09;又称I2C&#xff0c;是是IICBus简称&#xff0c;所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备…...

vCenter VXR01405C ALARM Certificate is about to expire

vCenter VXR01405C ALARM Certificate is about to expire 需要更新证书 步骤如下 ===vCenter=== root@vc [ ~ ]# for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; sudo /usr/lib/vmware-vmafd/b STORE MACHINE_SSL_CERT Alias : __MACHINE…...

安装和微调大模型(基于LLaMA-Factory)

打开终端&#xff08;在Unix或macOS上&#xff09;或命令提示符/Anaconda Prompt&#xff08;在Windows上&#xff09;。 创建一个名为lora的虚拟环境并指定Python版本为3.9。 https://github.com/echonoshy/cgft-llm/blob/master/llama-factory/README.mdGitHub - hiyouga/…...

使用docker搭建squid和ss5

docker run -d --name squid-container -e TZAsia/Shanghai -p 自定义端口并记得开放:3128 ubuntu/squid docker exec -it squid-container /bin/bash apt update && apt install vim # 修改 http_port 3128 为 http_port 0.0.0.0:3128 # 修改 http_access deny all 为…...

大数据面试题之Flink(1)

目录 Flink架构 Flink的窗口了解哪些&#xff0c;都有什么区别&#xff0c;有哪几种?如何定义? Flink窗口函数&#xff0c;时间语义相关的问题 介绍下Flink的watermark(水位线)&#xff0c;watermark需要实现哪个实现类&#xff0c;在何处定义?有什么作用? Flink的…...

策略模式、工厂模式和模板模式的应用

1、策略模式、工厂模式解决if else Cal package com.example.dyc.cal;import org.springframework.beans.factory.InitializingBean;public interface Cal extends InitializingBean {public Integer cal(Integer a, Integer b); }Cal工厂 package com.example.dyc.cal;impo…...

在postman中调试supabase的API接口

文章目录 在supabase中获取API地址和key知道它的restfull风格在postman中进行的设置1、get请求调试2、post新增用户调试3、使用patch更新数据&#xff0c;不用put&#xff01;4、delete删除数据 总结 在supabase中获取API地址和key 首先登录dashboard后台&#xff0c;首页- 右…...

微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…...

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第49课-机器人自动跳舞 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…...

【LLM教程-llama】如何Fine Tuning大语言模型?

今天给大家带来了一篇超级详细的教程,手把手教你如何对大语言模型进行微调(Fine Tuning)&#xff01;&#xff08;代码和详细解释放在后文&#xff09; 目录 大语言模型进行微调(Fine Tuning)需要哪些步骤&#xff1f; 大语言模型进行微调(Fine Tuning)训练过程及代码 大语言…...

PHP 比 Java 的开发效率高在哪?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「JAVA的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;做了几年PHP&#xff0c;最近…...

高德定位获取详细位置失败的处理方法

在使用高德地图定位功能获取位置信息有时候会获取详细位置失败,但是经纬度是有的,这种情况下怎么处理呢,可以使用逆地理编码通过返回的经纬度来再次获取位置信息,如果再次失败那么获取详细位置信息就失败了。 具体工具类如下: package com.demo.map.utils;import androi…...

PX2平台Pytorch源码编译

写在前面&#xff1a;以下内容完成于2019年底&#xff0c;只是把笔记放到了CSDN上。 需要注释掉NCLL及分布式相关的配置 libcudart.patch diff --git a/torch/cuda/__init__.py b/torch/cuda/__init__.py index 4591702..07e1268 100644 --- a/torch/cuda/__init__.pyb/torc…...

昇思25天学习打卡营第6天|简单的深度学习模型实战 - 函数式自动微分

自动微分(Automatic Differentiation)是什么&#xff1f;微分是函数在某一处的导数值&#xff0c;自动微分就是使用计算机程序自动求解函数在某一处的导数值。自动微分可用于计算神经网络反向传播的梯度大小&#xff0c;是机器学习训练中不可或缺的一步。 这些公式难免让人头大…...

基于Linux的云端垃圾分类助手

项目简介 本项目旨在开发一个基于嵌入式系统的智能垃圾分类装置。该装置能够通过串口通信、语音播报、网络通信等多种方式&#xff0c;实现垃圾的自动识别和分类投放。系统采用多线程设计&#xff0c;确保各功能模块高效并行工作。 项目功能 垃圾分类识别 系统使用摄像头拍摄…...

【PYG】Planetoid中边存储的格式,为什么打印前十条边用edge_index[:, :10]

edge_index 是 PyTorch Geometric 中常用的表示图边的张量。它通常是一个形状为 [2, num_edges] 的二维张量&#xff0c;其中 num_edges 表示图中边的数量。每一列表示一条边&#xff0c;包含两个节点的索引。 实际上这是COO存储格式&#xff0c;官方文档里也有写&#xff0c;…...

【知识图谱系列】(实例)python操作neo4j构建企业间的业务往来的知识图谱

本章节通过聚焦于"金额"这一核心属性&#xff0c;构建了一幅知识图谱&#xff0c;旨在揭示"销售方"与"购买方"间的商业互动网。在这张图谱中&#xff0c;绿色节点象征着购买方&#xff0c;而红色节点则代表了销售方。这两类节点间的紧密连线&…...

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题

解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题 确保清空/var/lib/mysql初始化启动mysql参考 确保清空/var/lib/mysql rm-rf /var/lib/mysql/* 初始化 mysql_install_db --usermysql --basedir/usr --datadir/var/lib/mysql 其中的mysql用户不要改成root。否则会…...

探索WebKit的Flexbox奇境:CSS Flexbox支持全解析

探索WebKit的Flexbox奇境&#xff1a;CSS Flexbox支持全解析 在现代网页设计中&#xff0c;响应式布局的需求日益增长&#xff0c;CSS Flexbox作为布局模式的一个突破性进展&#xff0c;提供了一种更加高效和灵活的方式来设计复杂的用户界面。WebKit&#xff0c;作为众多流行浏…...

热门的牙齿矫正正畸李杨哪个好

在社交媒体上&#xff0c;关于“牙齿矫正哪家好”、“李杨医生靠谱吗”的讨论热度居高不下。许多粉丝在评论区留言&#xff0c;想知道这位在网络红人榜上经常出现的正畸专家&#xff0c;是否真的值得托付那长达一两年的矫正周期。作为一个长期关注口腔健康领域的观察者&#xf…...

NotebookLM音乐学应用的5个致命误区(附诊断清单),90%新手在第3步就误入歧途导致文献溯源失效

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM音乐学研究辅助的底层逻辑与适用边界 NotebookLM 本质是一个基于用户上传文档构建私有语义索引的轻量级 AI 助手&#xff0c;其核心并非通用大模型的自由生成&#xff0c;而是“引用驱动型推…...

无风扇智能本设计全解析:从被动散热原理到工程实践

1. 项目概述&#xff1a;一台“安静”的电脑&#xff0c;究竟意味着什么&#xff1f;最近在折腾一个挺有意思的项目&#xff0c;名字叫“无风扇创新智能本”。乍一听&#xff0c;你可能觉得这不就是一台没有风扇的笔记本电脑吗&#xff1f;市面上不是早就有一些主打静音的轻薄本…...

167.YOLOv8口罩检测常见问题避坑(loss为NaN/显存溢出/ONNX导出失败实战版)

摘要 目标检测是计算机视觉领域的核心任务之一。YOLO(You Only Look Once)系列模型凭借其端到端、单阶段、高实时性的特性,已成为工业界和学术界最广泛使用的目标检测框架。本文从零开始,系统讲解YOLOv8的核心原理,并给出从数据准备、模型训练、推理验证到ONNX部署的完整…...

构建多模型备用策略时Taotoken的聚合与路由能力价值

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 构建多模型备用策略时Taotoken的聚合与路由能力价值 在构建依赖大模型能力的生产应用时&#xff0c;服务的稳定性是核心考量之一。…...

一文读懂 .git 目录:Git 仓库的心脏与底层原理

你是否也曾好奇&#xff0c;Git 是如何记住我们每一次提交、每一次分支切换的&#xff1f;答案就藏在项目根目录下那个不起眼的 .git 文件夹里。它是 Git 仓库的 “心脏”&#xff0c;所有版本控制的数据、历史记录、配置信息都存储在这里。今天&#xff0c;我们就来深度拆解 .…...

怎么限制用户上传到MongoDB GridFS的文件总容量

GridFS不支持全局容量配额&#xff0c;需在应用层实现配额校验&#xff1a;上传前聚合查询fs.files中指定用户的length总和&#xff0c;判断是否超限&#xff0c;且须防范并发写入导致的超限问题。GridFS 本身不提供全局容量配额机制MongoDB 的 GridFS 是一个文件分片存储规范&…...

别再手动刷新了!Qt5/Qt6下用信号槽优雅处理串口热插拔(避坑QTimer的误用)

Qt串口热插拔检测&#xff1a;从定时轮询到事件驱动的架构升级 在工业控制、医疗设备和物联网终端开发中&#xff0c;串口通信的稳定性直接关系到系统可靠性。传统QTimer轮询方案虽然实现简单&#xff0c;但在实际项目中常遇到两个典型问题&#xff1a;一是频繁的端口扫描造成C…...

STM32H743以太网实战:基于CubeMX 6.8.0与LAN8720的LWIP移植避坑指南

1. 环境准备与CubeMX基础配置 折腾了一周终于把STM32H743的以太网调通&#xff0c;发现网上大多数教程都存在配置遗漏。这里分享我的完整配置流程&#xff0c;从CubeMX安装到最终Ping通&#xff0c;每个步骤都经过实测验证。 首先确保安装STM32CubeMX 6.8.0和对应的HAL库。我遇…...

智能健身器材核心技术解析:从光学编码器到电机驱动的安华高方案

1. 项目概述&#xff1a;当健身器材遇上“芯”动力如果你拆开一台近两年新出的智能动感单车、划船机或者高端跑步机&#xff0c;大概率会在其控制主板的核心位置&#xff0c;发现一枚印着“Avago”或“Broadcom”标志的芯片。这不是偶然。安华高科技&#xff08;Avago Technolo…...