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

设计模式-策略

定义

策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。简单来说,就是 “准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

核心角色

策略接口
具体策略
上下文

  • 持有一个策略接口的引用。
  • 可以定义一个接口来让策略访问它的数据。
  • 负责将客户的请求委托给当前的策略对象执行。

策略接口和具体策略

public interface StrategyInterface {void test();}@Component
class StrategyInterfaceImpl1 implements StrategyInterface {@Overridepublic void test() {System.out.println("进入StrategyInterfaceImpl1");}}@Component
class StrategyInterfaceImpl2 implements StrategyInterface {@Overridepublic void test() {System.out.println("进入StrategyInterfaceImpl2");}}

上下文【多变种】

@Component
@RequiredArgsConstructor
public class StrategyContext {// Spring会自动将StrategyInterface的所有实现bean注入到这个Map中// Key:bean的名称,Value:对应的策略实现beanprivate final Map<String, StrategyInterface> strategyMap;// 注入所有策略private final List<StrategyInterface> strategies;public void executeStrategy(String strategyType) {StrategyInterface strategy = strategyMap.get(strategyType);if (strategy == null) {throw new BussinessException("未找到对应的策略: " + strategyType);}strategy.test();}public Set<String> getAvailableStrategies() {return strategyMap.keySet();}}

测试

@RestController
@Api(tags = "测试策略模式")
@RequiredArgsConstructor
@RequestMapping("/strategy")
public class StrategyController {private final StrategyContext strategyContext;@GetMapping("/execute")public Result<Boolean> executeStrategy(@RequestParam String type) {strategyContext.executeStrategy(type);return Result.success();}
}

测试结果

策略模式

http://www.wxhsa.cn/company.asp?id=358

相关文章:

  • Linux中怎么调整系统inode数量?
  • DARPA AI网络挑战赛技术框架全解析:自动化漏洞挖掘与修复系统构建
  • 数据库基本查询语句
  • 【项目实战】基于WS63的鸿蒙星闪红外遥控车(循迹、超声波避障、远程控制、星闪/红外遥控)有教程代码
  • macbook pro怎么安装windows系统
  • XSS与CSRF的联系与区别
  • 异或
  • apche 2.4 开启mod_cache_disk和mod_deflate后,磁盘上缓存的是压缩后的文件
  • 复现tensor2tensor代码时遇到的问题和相关链接
  • macbook pro如何安装windows系统
  • 【ACM出版】第四届公共管理、数字经济与互联网技术国际学术会议(ICPDI 2025)
  • 如何在 Linux 中关闭 Swap(虚拟内存)
  • 再见 Cursor,Qoder 真香!这波要改写 AI 编程格局
  • 三.ubuntu22.04 使用C++部署PyTorch模型
  • alertmanager配置集群模式
  • 《Python数据结构与算法分析》代码
  • AI 是否绑架了云原生创新?
  • Windows 7 局域网打印机共享设置
  • SPFA求负环
  • 磁盘存储器
  • 多变量的递归2-组合总和问题(每个数字可以使用多次)
  • 戴尔Precision 7865 塔式工作站|安装rocky liunx 8.10
  • 基于STM32F411的AM2320温湿度采集程序
  • jmeter测试mysql
  • 博弈论杂谈
  • 基于MATLAB的图像配准与拼接实现
  • ESP-IDF在vscode环境下编译速度
  • Docker容器
  • EtherCAT总线介绍及耦合器EK1100
  • centos服务器定时任务备份数据库脚本