如何使用策略模式并让spring管理

news/2025/1/19 5:14:52/
1、策略模式公共接口类 
BankFileStrategy
java">public interface BankFileStrategy {String getBankFile(String bankType) throws Exception;
}
2、策略模式业务实现类
java">@Slf4j
@Component
public class ConcreteStrategy implements BankFileStrategy {@Overridepublic String getBankFile(String bankType) throws Exception {....业务代码}
3、策略模式实现类枚举
java">public enum BankTypeClassEnum {//strategyA("ICBC", "concreteStrategy"),;private String name;private String implName;public static String getImplName(String name) {if (StringUtils.isBlank(name)) {return null;}for (BankTypeClassEnum aEnum : BankTypeClassEnum.values()) {if (aEnum.getName().equals(name)) {return aEnum.getImplName();}}return null;}BankTypeClassEnum(String name, String implName) {this.name = name;this.implName = implName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getImplName() {return implName;}public void setImplName(String implName) {this.implName = implName;}
}
4、策略模式执行类
java">@Slf4j
@Component
public class BankFileContext {//当一个接口有多个实现类时,Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类@Autowiredprivate Map<String, BankFileStrategy> bankFileStrategyMap;/*** 执行类*/public String execute(String bankType) throws Exception {BankFileStrategy service = bankFileStrategyMap.get(BankTypeClassEnum.getImplName(bankType));return service.getBankFile(bankType);}
}
5、测试策略模式
java">@Slf4j
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestBankFileController {private final BankFileContext bankFileContext;@GetMapping(value = "/bank/{bankType}/file")public String testBankFile(@PathVariable String bankType) {try {return bankFileContext.execute(bankType);} catch (Exception e) {log.error("testBankFile is error", e);return "error";}}
}


http://www.ppmy.cn/news/1564313.html

相关文章

python学opencv|读取图像(三十四)阈值处理-彩色图像

【1】引言 前序已经掌握了使用阈值处理函数控制灰度图的RGB值&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;三十三&#xff09;阈值处理图像-限定像素-CSDN博客 在更早的学习中&#xff0c;灰度图的RGB只有一个通道&#xff0c;也就是各个像素点…

【Block总结】WTConv,小波变换(Wavelet Transform)来扩展卷积神经网络(CNN)的感受野

论文解读&#xff1a;Wavelet Convolutions for Large Receptive Fields 论文信息 标题: Wavelet Convolutions for Large Receptive Fields作者: Shahaf E. Finder, Roy Amoyal, Eran Treister, Oren Freifeld提交日期: 2024年7月8日arXiv链接: Wavelet Convolutions for La…

【软件工程】知识点总结(下)

目录 第六章&#xff1a;结构化开发方法 6.1结构化分析方法概述 6.2 数据流图 6.3 数据字典 6.4 E-R图 6.5 状态转换图 6.6 结构化设计目标和任务 6.7结构化设计的概念和原理 6.8面向数据流的设计方法 6.9 详细设计&#xff08;过程设计&#xff09; 6.10概要设计 第…

MySQL 数据库的备份和恢复(Linux)

数据丢失对任何企业来说都是致命的&#xff0c;而 MySQL 数据库作为大多数企业数据存储的核心&#xff0c;其备份与恢复的重要性不言而喻。尤其是在 Linux 环境下&#xff0c;如何高效、稳定地进行 MySQL 数据库的备份与恢复&#xff0c;成为数据库管理员的必修课。今天&#x…

Android 高版本如何获取App安装列表?

有个需求需要获取App内的安装列表,但是现在在高版本Android中,只能获取到一部分App效果,我获取的代码如下: val calendar Calendar.getInstance()val packageManager context.packageManagerval usageStatsManager context.getSystemService(Context.USAGE_STATS_SERVICE) …

python http server运行Angular 单页面路由时重定向,解决404问题

问题 当Angular在本地ng server运行时候&#xff0c;可以顺利访问各级路由。 但是运行ng build后&#xff0c;在dist 路径下的打包好的额index.html 必须要在服务器下运行才能加载。 在服务器下我们第一次访问路由页面时是没有问题的&#xff0c;但是尝试刷新页面或手动输入路…

【工具】curl工具

curl 官网&#xff1a; https://curl.se/ github: https://github.com/curl?languagec curl 命令 所有参数介绍在线文档 简单使用教程 邮件发送命令 注&#xff1a; 支持SMTP&#xff08;或者POP3&#xff09;协议&#xff0c;curl的版本必须高于7.20&#xff08;含&…

《初始Linux:多平台兼容的强者,无缝衔接各类设备的桥梁 》

对于新手而言&#xff0c;Linux 虽然看似神秘&#xff0c;但只要迈出第一步&#xff0c;你会发现它其实充满了乐趣和挑战。在接下来的内容中&#xff0c;我将带你一步步揭开 Linux 的神秘面纱&#xff0c;从基础概念到实际操作&#xff0c;帮助你轻松入门&#xff0c;开启属于你…