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

策略模式在项目中实际应用

Java策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。在Java中实现策略模式,通常包含三个角色:
策略接口:定义了一个公共接口,所有的具体策略类都必须实现这个接口。
具体策略类:实现了策略接口中定义的方法,每一个具体策略类都封装了一种具体的算法或行为。
上下文类:持有一个策略对象的引用,并负责调用其方法来执行相应的算法或行为。上下文类还可以维护对策略对象的引用,并可在运行时动态地改变所使用的策略对象。

  1. 上下文本类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;@Component
public class StrategyContext {// 保证线程安全private final Map<String, CommonStrategyService> strategyServiceMap = new ConcurrentHashMap<>();@Autowiredpublic void strategyInterface(Map<String, CommonStrategyService> strategyServiceMap) {this.strategyServiceMap.clear();strategyServiceMap.forEach(this.strategyServiceMap::put);}public CommonStrategyService getStrategy(String str) {if (str.equals("A")) {return this.strategyServiceMap.get(str);} else if (str.equals("B")) {return this.strategyServiceMap.get(str);} else {return this.strategyServiceMap.get("COMMON");}}
}
  1. 策略接口
public interface CommonStrategyService {void getTest();boolean success();
}
  1. 具体策略类
@Service(value = "A")
public class AStrategyServiceImpl implements CommonStrategyService{@Overridepublic void getTest() {}@Overridepublic boolean success() {return false;}
}
@Service(value = "B")
public class BStrategyServiceImpl implements CommonStrategyService{@Overridepublic void getTest() {}@Overridepublic boolean success() {return false;}
}
@Service(value = "COMMON")
public class CommonStrategyServiceImpl implements CommonStrategyService{@Overridepublic void getTest() {}@Overridepublic boolean success() {return false;}
}
  1. 测试
@Service
public class StrategyTest {@Autowiredprivate StrategyContext strategyContext;public void test() {strategyContext.getStrategy("A").getTest();strategyContext.getStrategy("B").success();}
}
http://www.lryc.cn/news/323460.html

相关文章:

  • 没有磁盘整列下的多机分布式存储:使用rysnc+多服务器文件/文件夹内容同步
  • SQL:窗口函数之OVER()
  • 嵌入式开发--STM32G431RBTx-定时器中断流水灯
  • 人像抠图HumanSeg——基于大规模电话会议视频数据集的连接感知人像分割
  • Qt 项目使用visual studio 进行开发调试
  • Kotlin 中的惰性集合
  • 2024年React初学者入门路线指南
  • 【Java基础】了解Java安全体系JCA,使用BouncyCastle的ED25519算法生成密钥对、数据签名
  • SQL Server创建存储过程
  • GraphPad Prism 10:一站式数据分析解决方案
  • 前端基础篇-深入了解 Ajax 、Axios
  • 是德科技keysight N1912A双通道功率计
  • 怿星科技Neptune CHT-S测试系统,让智能座舱测试更加高效便捷
  • Vscode初建Vue时几个需要注意的问题
  • 最长不下降子序列
  • QT gridlayout 循环设置组件,表格也通用 已解决
  • 后端前行Vue之路(一):初识Vue
  • C#、.NET版本、Visual Studio版本对应关系及Visual Studio老版本离线包下载地址
  • yarn安装包时报错error Error: certificate has expired
  • 手机可以格式化存储卡吗?格式化以后出现什么情况
  • 亚马逊AWS展示高效纠错的全新量子比特!
  • FEX-Emu在Debian/Ubuntu系统使用
  • docker 不同架构镜像融合问题解决
  • windows_anaconda 安装pytorch
  • IP SSL证书注册流程
  • shentou思路流程
  • 航空实时监控
  • 第十四届蓝桥杯JavaB组省赛真题 - 幸运数字
  • 【练习】双指针算法思想
  • Leetcode 20. 有效的括号