Java设计模式之策略模式的深入探究

策略模式是一种设计模式,通过允许算法或行为独立于客户端对象而变化,从而实现算法或行为的动态改变。这种模式由 context(上下文)、strategy(策略)和 concretestrategy(具体策略)等角色组成。在实战案例中,它可以帮助我们创建使用不同算法计算学生成绩的应用程序。策略模式的优点包括灵活性、解耦、可扩展性和可重用性。它适用于系统有多种执行任务方式、算法或行为需要在运行时动态改变以及需要避免客户端代码与算法或行为具体实现产生耦合的情况。

Java设计模式之策略模式的深入探究

Java 设计模式之策略模式的深入探究

概述

策略模式是一种设计模式,它允许算法或行为独立于客户端对象而变化,从而使算法或行为可以在运行时互换。这种模式提供了灵活性,允许在不修改客户端代码的情况下动态改变应用程序的行为。

结构

策略模式通常由以下角色组成:

Context(上下文):持有策略的引用并调用其执行方法。Strategy(策略):定义算法或行为的接口。ConcreteStrategy(具体策略):实现 Strategy 接口的具体算法或行为。

实战案例

考虑一个使用不同的算法来计算学生成绩的应用程序。我们可以使用策略模式来实现这种功能:

PHP高级程序设计 模式 框架与测试(中文高清PDF版) PHP高级程序设计 模式 框架与测试(中文高清PDF版)

享有盛誉的PHP高级教程,Zend Framework核心开发人员力作,深入设计模式、PHP标准库和JSON 。   今天,PHP已经是无可争议的Web开发主流语言。PHP 5以后,它的面向对象特性也足以与Java和C#相抗衡。然而,讲述PHP高级特性的资料一直缺乏,大大影响了PHP语言的深入应用。   本书填补了这一空白。它专门针对有一定经验的PHP程序员,详细讲解了对他们最为重要的主题

PHP高级程序设计 模式 框架与测试(中文高清PDF版) 455 查看详情 PHP高级程序设计 模式 框架与测试(中文高清PDF版)

立即学习“Java免费学习笔记(深入)”;

// Context (上下文)public class StudentGradingContext {    private GradingStrategy strategy;    public StudentGradingContext(GradingStrategy strategy) {        this.strategy = strategy;    }    public double calculateGrade(double score) {        return strategy.calculateGrade(score);    }}// Strategy (策略)public interface GradingStrategy {    double calculateGrade(double score);}// ConcreteStrategy (具体策略)public class SimpleGradingStrategy implements GradingStrategy {    @Override    public double calculateGrade(double score) {        return score;    }}// ConcreteStrategy (具体策略)public class WeightedGradingStrategy implements GradingStrategy {    private double weight;    public WeightedGradingStrategy(double weight) {        this.weight = weight;    }    @Override    public double calculateGrade(double score) {        return score * weight;    }}// Client (客户端)public class Client {    public static void main(String[] args) {        StudentGradingContext context = new StudentGradingContext(new SimpleGradingStrategy());        double grade = context.calculateGrade(85.0);        System.out.println("Grade: " + grade);        context = new StudentGradingContext(new WeightedGradingStrategy(0.8));        grade = context.calculateGrade(90.0);        System.out.println("Weighted Grade: " + grade);    }}

输出:

Grade: 85.0Weighted Grade: 72.0

优点

灵活性:允许动态改变算法或行为,而无需修改客户端代码。解耦:将算法或行为与使用它们的客户端解耦。可扩展性:易于添加新算法或行为,只需创建新的具体策略类即可。可重用性:相同算法或行为可用于多个客户端。

使用场景:

当一个系统有多种执行任务的方式时。当算法或行为必须在运行时动态改变时。当需要避免客户端代码与算法或行为的具体实现产生耦合时。

以上就是Java设计模式之策略模式的深入探究的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/846930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月27日 15:38:55
下一篇 2025年11月27日 15:53:10

相关推荐

  • ai生成视频入口

    ai生成视频入口: 即梦ai:jimeng.jianying.com DeepSeek:chat.deepseek.com 访问这些工具的官方网站后,通常在首页显眼位置会看到“AI 生成视频”或“一键生成视频”等按钮。点击进入后,根据页面指引输入视频主题、脚本内容以及风格偏好等信息,即可利用 AI …

    2025年12月6日 软件教程
    000
  • 喵趣漫画官网登录页面 喵趣漫画免费阅读全本漫画

    喵趣漫画官网登录页面位于其官方网站https://www.miaoqumanhua.com/,用户可直接通过浏览器访问并登录账号。 喵趣漫画官网登录页面在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来喵趣漫画免费阅读全本漫画的相关信息,感兴趣的网友一起随小编来瞧瞧吧! https://ww…

    2025年12月6日 软件教程
    000
  • Linux文件系统的日志功能与故障排除

    Linux文件系统日志功能通过记录事务确保元数据一致性,提升崩溃后恢复能力。ext3/4、XFS等支持日志,分元数据、数据、顺序和回写模式,各具安全与性能权衡。故障常表现为启动卡住、挂载失败或内核报错“journal has aborted”。排查需查dmesg日志、卸载设备、运行e2fsck或xf…

    2025年12月6日 运维
    000
  • Intel 14A工艺冲击代工:客户初步反馈令人鼓舞!

    10月26日消息,intel原本计划在18a工艺节点大力发展外部代工,但进展非常不乐观,不得不改为内部使用,转而发展14a代工。 终于迎来季度盈利后,Intel还简短披露了一个好消息:“外部客户对14A的初步反馈令人鼓舞!” 当然,Intel是不可能主动公布都有哪些代工客户的,只能继续耐心等待了。 …

    2025年12月6日 行业动态
    000
  • 攀升主机 RGB 灯效错乱?主板灯光协议兼容性故障检测​

    攀升主机 rgb 灯效错乱通常由软件冲突或硬件兼容性问题引起,解决方法包括:1. 更新主板 bios 和 rgb 控制软件;2. 检查 rgb 设备连接是否稳固;3. 更换兼容性更好的 rgb 设备。主流的主板 rgb 控制软件有华硕 aura sync、微星 mystic light、技嘉 rgb…

    2025年12月6日 硬件教程
    000
  • Linux命令行中vimdiff命令的实战应用

    vimdiff是Linux下基于vim的文本差异比较与合并工具,通过高亮显示文件差异并支持双向同步操作。使用vimdiff file1.txt file2.txt或vim -d命令可启动双窗口对比,蓝色标示独有内容,紫/红色表示不一致,相同部分无着色。通过Ctrl+w w切换窗口,do命令获取对方差…

    2025年12月6日 运维
    000
  • 苹果开发者自曝用 Claude 完成 95% 开发,开发应用已上架

    苹果开发者自曝用 ai 开发应用程序,claude 含量 95%! 事情是这样的,一位苹果开发者最新发布了一款用于调试 MCP 服务器的原生 macOS 应用Context—— 一款几乎完全由 Claude Code 构建的应用程序。 作者indragiek从 2008 年就开始为 Mac 开发软件…

    2025年12月6日 硬件教程
    000
  • Linux systemctl restart=on-failure配置示例

    Restart=on-failure 是 systemd 中用于在服务异常退出时自动重启的配置选项,适用于崩溃或非正常终止的情况。它会在服务因非零退出码、信号终止、超时或看门狗触发时重启,但不会在手动停止时启动。示例配置中通过设置 Restart=on-failure 和 RestartSec=5s…

    2025年12月6日 运维
    000
  • 漫蛙manwa2正版官网 蛙漫2手机网页版在线阅读

    漫蛙manwa2正版官网是https://manwa.site,提供海量高清漫画资源,支持多设备同步、个性化阅读设置及快速更新,另有备用网址https://manwa.me等供不同地区用户访问。 漫蛙manwa2正版官网在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来蛙漫2手机网页版在线阅…

    2025年12月6日 软件教程
    000
  • 谁最容易被 AI 替代?清华大学教授:初级白领最危险

    清华大学心理与认知科学系主任刘嘉教授近期与腾讯科技展开对话,围绕人类价值的重新评估、不可替代的核心能力以及与人工智能共生的新模式进行了深入交流。在谈及经典的“ai 替代”话题时,刘嘉指出,大模型本质上是“知识的聚合体”,因此白领群体,尤其是从事知识密集型工作的人群,将是最先受到冲击的一批人。 刘嘉预…

    2025年12月6日 硬件教程
    000
  • 如何在Linux中监控守护进程状态?

    使用systemctl、ps、pgrep等命令查看进程状态,并结合日志文件与自动化脚本实现持续监控,例如通过systemctl status查看服务状态,ps aux | grep或pgrep检查进程存在性,配合journalctl和tail -f分析日志,编写脚本定时检测服务状态并告警,确保守护进…

    2025年12月6日 运维
    000
  • AMD首款CPU 50年了逆向工程克隆Intel 8080:成本50美分卖700美元

    10月26日消息,相比于intel成立之初的传奇,amd的起家似乎有点不太高尚,但也是特定历史背景下的特殊经历,不可能再被复制。 整整50年前,AMD的第一款CPU处理器诞生了,它就是AM9080。 它的争议之处在于并非原生自主设计,而是通过对Intel 8080处理器进行逆向工程研究,克隆而来。 …

    2025年12月6日 行业动态
    000
  • Linux文件系统smartctl命令使用教程

    smartctl是Linux下监控硬盘健康的核心工具,通过读取S.M.A.R.T.信息实现故障预警。1. 安装:Ubuntu/Debian用sudo apt install smartmontools,CentOS/RHEL/Fedora用sudo yum install smartmontools…

    2025年12月6日 运维
    000
  • 实测 Gemini 图片转视频新功能,终于蹲到经典梗图后续了(doge)

    gemini 也接入图片转视频功能了!还是带声音那种! 官方给出来的示例是开盒子出现各种东西,音效还挺丰富的。 不得不说我看到最后那个真的没忍住笑…… 看起来挺有意思,不过我有点想问: 立即进入“豆包AI人工智官网入口”; 立即学习“豆包AI人工智能在线问答入口”; 盒子里装什么都可以吗? 不是盒子…

    2025年12月6日 硬件教程
    000
  • 解决npm install无法找到依赖但可手动下载的问题

    本文旨在解决`npm install`过程中,部分依赖无法找到但可以手动下载的情况。我们将介绍如何使用`npm link`命令,通过创建本地符号链接,将手动下载的依赖项集成到项目中,避免重复下载和管理多个`package.json`文件,从而保持项目依赖关系的清晰和一致。 当使用npm instal…

    2025年12月6日 web前端
    000
  • vivo V30相机保存速度慢怎么处理 vivo V30存储优化方法

    先检查存储空间和运行状态,确保可用空间超20%并清理缓存;再清理相机应用数据重置设置;最后优化相册与拍摄习惯,可显著提升vivo V30拍照保存速度。 如果你的vivo V30拍照后保存速度慢,不用着急换手机,多数情况是系统或设置问题。通过几个简单操作就能明显改善。下面这些方法按排查顺序整理,建议一…

    2025年12月6日 手机教程
    000
  • 如何在 JavaScript 应用中合并多个 Firebase 项目

    本文旨在指导开发者如何在单个 JavaScript 应用中集成和管理多个 Firebase 项目。通过正确配置和初始化,开发者可以同时访问和操作来自不同 Firebase 项目的数据和服务,从而构建更复杂、更强大的应用。本文将详细介绍如何初始化多个 Firebase 项目,并提供示例代码和注意事项,…

    2025年12月6日 web前端
    000
  • 解决Vue FullCalendar同时加载多个BOM数据的问题

    本文旨在解决在使用Vue FullCalendar组件时,通过点击按钮一次性加载多个BOM数据到日历中导致的问题。通过分析问题代码,并结合解决方案,提供了一个清晰的步骤,帮助开发者避免数据重复加载,并确保FullCalendar组件的正常使用。 问题分析与解决方案 在使用Vue FullCalend…

    2025年12月6日 web前端
    000
  • VS Code设置管理:JSON架构与配置验证技术解析

    VS Code的设置系统基于JSON架构实现灵活配置管理,通过settings.json文件支持用户级和工作区级设置,利用JSON Schema提供智能提示与实时校验,第三方扩展可通过package.json注册配置schema并集成到全局体系,开发者可借助命令面板和输出日志排查配置错误,推荐结合图…

    2025年12月6日 开发工具
    000
  • Swoole的reload和restart有什么不同

    reload不中断服务,仅重启worker进程以更新代码;restart则完全重启所有进程,导致服务短暂中断。日常更新推荐使用reload,而配置或结构性变更需restart。 在使用 Swoole 时,reload 和 restart 都可以用来更新服务代码,但它们的执行方式和影响有本质区别。 r…

    2025年12月6日 PHP框架
    000

发表回复

登录后才能评论
关注微信