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

Java设计模式之《策略模式》

目录

1、策略介绍

2、特点

2.1、优缺点

2.2、和工厂模式对比

3、实现


前言


1、策略介绍

        策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换使用。

如下所示:

策略模式使得算法可以独立于使用它的客户端而变化。


2、特点

2.1、优缺点

1、策略模式优点:

策略类之间可以自由切换:

        由于策略类都实现同一个接口,所以使它们之间可以自由切换。避免使用多重条件选择语句(if else),充分体现面向对象设计思想。

易于扩展:

        增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“。

2、策略模式缺点:

        客户端必须知道所有的策略类,并自行决定使用哪一个策略类,策略模式将造成产生很多策略类。

2.2、和工厂模式对比

如下所示:


3、实现

下面是策略模式的一个简单实现示例:

        假设我们有一个计算器应用程序,可以执行不同的运算策略(例如加法、减法、乘法、除法)。我们可以使用策略模式来实现这些运算。

1、定义策略接口

public interface OperationStrategy {int execute(int a, int b);
}

2、实现具体策略

public class AdditionStrategy implements OperationStrategy {@Overridepublic int execute(int a, int b) {return a + b;}
}public class SubtractionStrategy implements OperationStrategy {@Overridepublic int execute(int a, int b) {return a - b;}
}public class MultiplicationStrategy implements OperationStrategy {@Overridepublic int execute(int a, int b) {return a * b;}
}public class DivisionStrategy implements OperationStrategy {@Overridepublic int execute(int a, int b) {if (b == 0) {throw new IllegalArgumentException("Cannot divide by zero");}return a / b;}
}

3、使用策略上下文

public class CalculatorContext {private OperationStrategy strategy;public void setStrategy(OperationStrategy strategy) {this.strategy = strategy;}public int executeStrategy(int a, int b) {return strategy.execute(a, b);}
}

4、客户端代码

public class StrategyPatternDemo {public static void main(String[] args) {CalculatorContext calculator = new CalculatorContext();calculator.setStrategy(new AdditionStrategy());System.out.println("Addition: " + calculator.executeStrategy(5, 3));calculator.setStrategy(new SubtractionStrategy());System.out.println("Subtraction: " + calculator.executeStrategy(5, 3));calculator.setStrategy(new MultiplicationStrategy());System.out.println("Multiplication: " + calculator.executeStrategy(5, 3));calculator.setStrategy(new DivisionStrategy());System.out.println("Division: " + calculator.executeStrategy(6, 3));}
}

总结

        策略模式通过将算法封装在独立的策略类中,实现了算法的解耦和动态选择。它提高了代码的灵活性和可维护性,特别是在需要频繁切换或扩展算法的场景中。


参考文章:

1、策略模式适用场景与具体实例解析_策略模式应用场景-CSDN博客文章浏览阅读1.4k次,点赞5次,收藏8次。策略模式在多种场合下都能发挥其优势,尤其在需要根据不同条件或策略选择不同算法的场景中。下面是几个具体的适用场景及其对应的实例,以帮助进一步理解策略模式的实际应用。_策略模式应用场景 https://blog.csdn.net/h356363/article/details/140408049?ops_request_misc=%257B%2522request%255Fid%2522%253A%25224c78c5b6a3ccda22d9db323028f3b03c%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=4c78c5b6a3ccda22d9db323028f3b03c&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-140408049-null-null.142^v102^control&utm_term=%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8&spm=1018.2226.3001.4187

http://www.lryc.cn/news/620705.html

相关文章:

  • Effective C++ 条款41:理解隐式接口和编译期多态
  • 应用系统连达梦数据库报“服务器模式不匹配”的根源与修复方案
  • 使用colmap自制3DGaussian_Splatting数据集
  • BotCash:GPT-5发布观察 工程优化的进步,还是技术突破的瓶颈?
  • GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
  • 通过机器学习框架实现Android手写识别输入功能
  • Spring Boot 3中JWT密钥安全存储方案
  • Python训练营打卡Day32-神经网络的训练
  • 【Golang】Golang内存泄漏问题排查(二)
  • OpenCv(三)——图像平滑处理
  • 8. 函数简介
  • OpenCV中对图像进行平滑处理的4种方式
  • HarmonyOS AI辅助编程工具(CodeGenie)智慧调优
  • 力扣(LeetCode) ——225 用队列实现栈(C语言)
  • 信息vs知识:人类学习与AI规则提取
  • 异步编程的 8 种实现方式:疑难点与注意事项解析
  • 《疯狂Java讲义(第3版)》学习笔记ch4
  • 安全加固4(K8S最小化微服务安全)
  • C++ 中的元控制流与概念化类型擦除
  • Elasticsearch 中如何配置 RBAC 权限-实现安全的访问控制
  • 论郑和下西洋元素融入课件编辑器的意义与影响​
  • 智能门锁:安全与便捷的现代家居入口
  • UE小:编辑器模式下「窗口/鼠标不在焦点」时仍保持高帧率
  • UE5配置MRQ编解码器输出MP4视频
  • Mybatis学习笔记(三)
  • PostgreSQL 免安装
  • AXI GPIO 2——ZYNQ学习笔记
  • 相较于传统AR作战环境虚拟仿真系统,其优势体现在哪些方面?
  • Mysql基本使用语句(一)
  • 生成和发布博客的工作流