当前位置: 首页 > 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.rkmt.cn/news/1755.html

相关文章:

  • 数据库基本查询语句
  • 《Python数据结构与算法分析》代码
  • jmeter测试mysql
  • Docker容器
  • models中integer、char、Boolean、text、datetime字段类型的常用参数设置
  • PVE跨集群迁移虚机
  • 告别资料混乱!PJMan 让项目文件管理,简单到不用找
  • CRMEB标准版PHP订单列表功能解析与实战应用
  • vue3不允许缓存组件keep-alive直接包裹router-view
  • Python中的枚举类
  • Hall 定理相关
  • docker save load 案例
  • 数据结构与算法-25.红黑树
  • Python 虚拟环境使用和打包成exe程序
  • linux调优工具的简单介绍
  • 多线程同步问题-从语法到硬件
  • JWT攻击详解与CTF实战
  • MyEMS:开源能源管理的破局者
  • github拉项目报Failed to connect to github.com port 443失败解决方法
  • 第9章 STM32 TCP配置和测试
  • 人像 风光 纪实 旅游、生活 摄影精选集
  • 必看!Apache DolphinScheduler 任务组因 MySQL 时区报错全解析与避坑指南
  • MyEMS:技术架构深度剖析与用户实践支持体系
  • mysql常用命令
  • C++ 标准库 copy_if
  • 企查查API接口组合:解锁企业数据智能的实战密码
  • 微信公众号封面提取教程
  • 数据结构与算法-24.2-3查找树
  • IPv4向IPv6平滑过渡综合技术方案
  • TIA博图中的常用指令:定时器、计数器和触发器