当前位置: 首页 > 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"));}}

http://www.lryc.cn/news/388787.html

相关文章:

  • 嵌入式学习——硬件(IIC、ADC)——day56
  • vCenter VXR01405C ALARM Certificate is about to expire
  • 安装和微调大模型(基于LLaMA-Factory)
  • 使用docker搭建squid和ss5
  • 大数据面试题之Flink(1)
  • 策略模式、工厂模式和模板模式的应用
  • 在postman中调试supabase的API接口
  • 微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)
  • 【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞
  • 【LLM教程-llama】如何Fine Tuning大语言模型?
  • PHP 比 Java 的开发效率高在哪?
  • 高德定位获取详细位置失败的处理方法
  • PX2平台Pytorch源码编译
  • 昇思25天学习打卡营第6天|简单的深度学习模型实战 - 函数式自动微分
  • 基于Linux的云端垃圾分类助手
  • 【PYG】Planetoid中边存储的格式,为什么打印前十条边用edge_index[:, :10]
  • 【知识图谱系列】(实例)python操作neo4j构建企业间的业务往来的知识图谱
  • 解决MySQL删除/var/lib/mysql下的所有文件后无法启动的问题
  • 探索WebKit的Flexbox奇境:CSS Flexbox支持全解析
  • Unity--协程--Coroutine
  • 详解COB显示屏的技术特点
  • 富唯智能推出的AMR复合机器人铝板CNC上下料方案
  • springcloud-config服务器,同样的配置在linux环境下不生效
  • 写代码,为什么还需要作图?
  • 一句话介绍什么是AI智能体?
  • 32.哀家要长脑子了!
  • Vue2 - 项目上线后生产环境中去除console.log的输出以及断点的解决方案
  • phpword生成PDF
  • Linux进程优先级
  • 每日一题——Python实现PAT乙级1096 大美数(举一反三+思想解读+逐步优化)3千字好文