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

23种设计模式之【策略模式】-核心原理与 Java 实践 - 详解

策略模式的核心原理

策略模式(Strategy Pattern)是一种行为型设计模式,它的核心思想行概括为:将一系列可互换的算法封装起来,使得它们可以相互替换,并且算法的变化不会影响使用算法的客户端。

策略模式的三大核心角色

策略模式的核心优势

  • 消除大量条件判断:用多态替代 if-else 或 switch-case,使代码更清晰
  • 遵循开闭原则:新增策略只需搭建接口,无需修改原有代码
  • 提高代码复用性:每个策略都是独立的类,便于复用和测试
  • 动态切换算法:可以在运行时根据需要切换不同的策略

策略模式的核心优势

实际应用场景

策略模式在实际开发中广泛应用,例如:

支付方式选择:支付宝、微信、银联等不同支付策略
排序算法:冒泡排序、敏捷排序、归并排序等可互换
导航算法:步行导航、驾车导航、公共交通导航等
折扣计算:普通折扣、会员折扣、满减折扣等

Java 实践

// 策略接口:计算操作
interface CalculationStrategy {
int execute(int a, int b);
}
// 具体策略:加法
class AdditionStrategy
implements CalculationStrategy {
@Override
public int execute(int a, int b) {
return a + b;
}
}
// 具体策略:减法
class SubtractionStrategy
implements CalculationStrategy {
@Override
public int execute(int a, int b) {
return a - b;
}
}
// 具体策略:乘法
class MultiplicationStrategy
implements CalculationStrategy {
@Override
public int execute(int a, int b) {
return a * b;
}
}
// 环境类:计算器
class Calculator
{
private CalculationStrategy strategy;
public void setStrategy(CalculationStrategy strategy) {
this.strategy = strategy;
}
public int calculate(int a, int b) {
if (strategy == null) {
throw new IllegalStateException("策略未设置");
}
return strategy.execute(a, b);
}
}
// 测试类
public class StrategyPatternDemo
{
public static void main(String[] args) {
Calculator calculator = new Calculator();
// 使用加法策略
calculator.setStrategy(new AdditionStrategy());
System.out.println("10 + 5 = " + calculator.calculate(10, 5));
// 使用减法策略
calculator.setStrategy(new SubtractionStrategy());
System.out.println("10 - 5 = " + calculator.calculate(10, 5));
// 使用乘法策略
calculator.setStrategy(new MultiplicationStrategy());
System.out.println("10 * 5 = " + calculator.calculate(10, 5));
}
}
http://www.rkmt.cn/news/18411.html

相关文章:

  • RMQ与LCA学习笔记
  • mamba-硬件感知算法
  • gitee和github如何修改仓库名并且保持与原远程仓库的连接?(手把手教学) - 实践
  • 第十一篇
  • 如何在 Spring Boot 应用中配置多个 Spring AI 的 LLM 客户端
  • [Git] 放弃暂存区的修改
  • 前端里面transform和transition 属性的区别
  • 【MAC环境】安装多个 JDK - 指南
  • 第一个博客
  • k8s 主节点重启后 从节点 get 异常 - 教程
  • 训练笔记:博弈杂题
  • PyTorch 神经网络工具箱完全指南 - 详解
  • 2025表面瑕疵检测厂家TOP5推荐:表面瑕疵检测,薄膜瑕疵检测,瑕疵检测设备,瑕疵在线检测,铝箔瑕疵在线检测,外观瑕疵检测机,薄膜瑕疵检测仪,陶瓷膜瑕疵检测各种类型检测,精准高效的质量守护
  • 深入解析:如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘tokenizers’ 问题
  • Microsoft Office不小心卸载或重装系统后,如何重新安装 ... - sherlock
  • HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包) - 实践
  • 计算机视觉专家入选德国国家科学院
  • 2025 年工程管理软件/软件系统/软件App/软件平台/工程管理软件和验房系统公司/企业推荐榜:数字化转型下的实用选型指南
  • solutions
  • 完整教程:跨境必看:TikTok Ads广告竞价策略分享
  • 安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接
  • 04-最简单的字符设备驱动
  • 完整教程:手机可视化方案(针对浓度识别)
  • 用批处理材料实现Excel和word文件的重造
  • 实用指南:Linux编译SRS并测试RTMP流
  • HTML应用指南:利用POST请求获取全国索尼体验型零售店位置信息 - 详解
  • 离线安装 mysql
  • 为什么不该用 Double 表示金额及解决方案
  • 实用指南:WXML 编译错误修复总结
  • Vue.use(Vuex)