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

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

1、策略模式公共接口类 
BankFileStrategy
public interface BankFileStrategy {String getBankFile(String bankType) throws Exception;
}
2、策略模式业务实现类
@Slf4j
@Component
public class ConcreteStrategy implements BankFileStrategy {@Overridepublic String getBankFile(String bankType) throws Exception {....业务代码}
3、策略模式实现类枚举
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、策略模式执行类
@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、测试策略模式
@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.lryc.cn/news/521522.html

相关文章:

  • react中hooks之useRef 用法总结
  • 使用 Docker 部署 Java 项目(通俗易懂)
  • 如何在Ubuntu上安装和配置Git
  • FPGA 21 ,深入理解 Verilog 中的基数,以及二进制数与十进制数之间的关系( Verilog中的基数 )
  • 【redis】redis-cli命令行工具的使用
  • 使用Matplotlib显示中文的方法
  • SQL Server2022详细安装教程
  • 家里温度随心控,假期出行更舒适~
  • 压力测试详解
  • 从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系
  • Redis复制(replica)
  • [云讷科技] 用于软件验证的仿真环境
  • 使用 Vite 和 Vue 框架创建组件库
  • 【数据结构学习笔记】19:跳表(Skip List)
  • 【8】深入理解 Go 语言中的协程-从基础到高级应用
  • 深入理解 ECMAScript 2024 新特性:字符串 isWellFormed 方法
  • 算法分析与设计之贪心算法
  • Centos 宝塔安装
  • 蓝桥与力扣刷题(709 转换成小写字母)
  • Redis的过期策略、内存淘汰机制
  • 视觉多模态大模型---MiniMax-vl-01---以闪电般的注意力缩放基础模型
  • 【微服务】面试 3、 服务监控 SkyWalking
  • 【案例81】NMC调用导致数据库的效率问题
  • Linux_信号
  • LeetCode100之搜索二维矩阵(46)--Java
  • 学员答疑:安卓分屏窗口的TouchableRegion设置流程追踪
  • [cg] UE5 调试技巧
  • Python Wi-Fi密码测试工具
  • Linux 创建用户
  • 自建RustDesk服务器