高内聚低耦合【代码:ShoppingCart(一个类中提供多种操作购物车的方法体现高内聚)支付方式接口(信用卡类、微信支付类实现支付接口 体现低耦合)】

高内聚低耦合

⾼内聚指的是:⼀个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越⾼,则内聚性越⾼,即 “⾼内聚”。
低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。修改⼀处代码, 其他模块的代码改动越少越好.

高内聚低耦合是软件设计的重要原则,它可以提高代码的可维护性和可扩展性。下面我将分别展示一个高内聚低耦合的Java代码示例。

高内聚示例:

public class ShoppingCart {private List<Item> items;public void addItem(Item item) {// 添加商品到购物车}public void removeItem(Item item) {// 从购物车中移除商品}public double calculateTotal() {// 计算购物车中商品的总价}
}public class Item {private String name;private double price;// 省略构造函数和其他方法
}

在这个示例中,ShoppingCart 类负责管理购物车中的商品,它包含了添加商品、移除商品和计算总价的方法。Item 类表示购物车中的商品,它只包含商品的名称和价格信息。这样设计使得每个类都有清晰的职责,实现了高内聚。

低耦合示例:

public interface PaymentMethod {void pay(double amount);
}public class CreditCardPayment implements PaymentMethod {public void pay(double amount) {// 使用信用卡支付}
}public class CashPayment implements PaymentMethod {public void pay(double amount) {// 使用现金支付}
}public class Order {private PaymentMethod paymentMethod;public void setPaymentMethod(PaymentMethod paymentMethod) {this.paymentMethod = paymentMethod;}public void processPayment(double amount) {paymentMethod.pay(amount);}
}

在这个示例中,PaymentMethod 是一个接口,定义了支付的方法。CreditCardPayment 和 CashPayment 分别实现了 PaymentMethod 接口,分别表示信用卡支付和现金支付。Order 类包含了一个 PaymentMethod 对象,并且通过 setPaymentMethod 方法来设置支付方式,然后通过 processPayment 方法来进行支付。这样设计使得 Order 类与具体的支付方式解耦,实现了低耦合。

这两个示例展示了如何在Java中实现高内聚低耦合的代码设计。希望对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第1章 物联网模式简介---独特要求和体系结构原则

物联网用例的独特要求 物联网用例往往在功耗、带宽、分析等方面具有非常独特的要求。此外&#xff0c;物联网实施的固有复杂性&#xff08;一端的现场设备在计算上受到挑战&#xff0c;另一端的云容量几乎无限&#xff09;迫使架构师做出艰难的架构决策和实施选择。可用实现技…

【自动调参】年化29.3%,最大回撤18.5%​:lightGBM的参数优化

原创文章第570篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 研报复现继续&#xff1a;【研报复现】年化27.1%&#xff0c;人工智能多因子大类资产配置策略之benchmark 昨天调了一版参数&#xff0c;主要是lambda_l1, lambda_l2&#xff0c;防…

Vmvare12安装CentOS7.6

Vmvare12安装 注意事项 安装完成以后有这两个虚拟网卡。 CentOS官网镜像地址 https://www.centos.org/download/mirrors/Vmvare安装CentOS7.6 创建虚拟机 安装CentOS7.6 选择桌面版 磁盘分区 上述是确认使用自动分区。 设置密码 设置license information 欢迎页面 CentOS7…

使用Python实现网页数据获取与处理:以财经新闻为例

在现代数据驱动的世界中&#xff0c;获取并处理丰富的网页数据是非常重要的技能。本文将介绍如何使用Python编写一个程序&#xff0c;自动获取财经新闻数据并进行处理。这不仅可以帮助我们快速获取最新的财经信息&#xff0c;还可以为后续的数据分析和研究提供支持。 环境准备…

宝兰德受邀出席华为开发者大会2024,携手共绘基础软件新篇章

6月21日-23日&#xff0c;华为开发者大会&#xff08;HDC 2024&#xff09;在东莞松山湖举行&#xff0c;作为全球开发者的年度盛会&#xff0c;本次大会汇聚了众多业界精英与前沿技术。华为分享了HarmonyOS、盘古大模型、昇腾AI云服务、GaussDB数据库、自研仓颉编程语言等最新…

微信小程序录音

微信小程序的录音功能通过一组API来实现&#xff0c;主要涉及录音管理器&#xff08;RecorderManager&#xff09;的使用。下面是详细的实现步骤和代码示例&#xff1a; 初始化录音管理器 首先需要获取录音管理器的实例&#xff0c;可以通过 wx.getRecorderManager() 方法来获…

【IM即时通信 功能介绍】客户端用户在线状态订阅

本文档旨在介绍客户端用户在线状态订阅功能&#xff0c;该功能允许开发者通过 SDK 接口实时监控和接收指定用户的在线或离线状态变更通知。这一功能对于需要实时交流、状态同步或用户活动监控的应用场景至关重要。 功能特点 实时状态通知 跨平台通知&#xff1a;订阅成功后&…

使用 MediaPipe 实现实时手部追踪和手势识别 | Rerun展示

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 在本文中&#xff0c;我将展示一个使用 MediaPipe Python 和 Rerun SDK 进行手部追踪和手势识别的示例。如果您有兴趣深入了解并扩展您的知识&#xff0c;我将指导您如何安装 MediaPipe Python 和 Rerun SDK 来进行手部追…

深入Scala的变量声明与类型推断:语法糖下的智能推导

Scala是一种静态类型语言&#xff0c;以其强大的类型推断系统而闻名。变量声明和类型推断是Scala编程中的基础概念&#xff0c;它们共同简化了代码的编写并提高了开发效率。本文将深入探讨Scala中变量声明的语法规则和类型推断的工作原理。 1. Scala静态类型的优越性 静态类型…

深入理解Python中的*和**在函数参数与调用中的奥秘

深入理解Python中的*和**在函数参数与调用中的奥秘 在Python编程中&#xff0c;*和**这两个操作符在函数参数和函数调用中扮演着特殊的角色。它们分别用于处理位置参数&#xff08;positional arguments&#xff09;和关键字参数&#xff08;keyword arguments&#xff09;&am…

Linux部署SVN

一.下载与安装 &#xff08;1&#xff09;yum安装 yum install subversion &#xff08;2&#xff09;源文件编译安装 ①下载svn源文件 subversion-xxx.tar.gz&#xff08;subversion 源文件&#xff09; subversion-deps-xxx.tar.gz&#xff08;subversion依赖文件&…

RAG项目工期

工期 第一期&#xff0c;基于term的检索&#xff0c;大模型生成 第二期&#xff0c;搭建前端界面&#xff0c;落地 上传pdf&#xff0c;一键解析&#xff0c;上传多个pdf 提问 第三期&#xff0c;使用向量检索&#xff0c;向量数据库选型 第四期&#xff0c;优化排序。 te…

BatchNorm和LayerNorm

参考链接 参考链接 参考链接

项目四 OpenStack身份管理

任务一 理解身份服务 1.1 •Keystone的基本概念 • 认证 &#xff08; Authentication &#xff09; —— 确认用户身份的过程 &#xff0c;又称身份验证 。 • 凭证 &#xff08; Credentials &#xff09; —— 又 称凭据&#xff0c;是用于 确认用户身份的数据 。 • 令牌…

短视频最佳时长:成都柏煜文化传媒有限公司

探索时间与内容之间的完美平衡 成都柏煜文化传媒有限公司 在数字媒体日益繁荣的今天&#xff0c;短视频已成为人们获取信息、娱乐休闲的重要形式。然而&#xff0c;关于短视频的最佳时长&#xff0c;一直是一个备受争议的话题。本文将探讨短视频时长的各种考量因素&#xff0…

MySQL报错Duplicate entry ‘0‘ for key ‘PRIMARY‘

报错现场 现象解释 因为你在插入时没有给 Customer.Id 赋值&#xff0c;MySQL 会倾向于赋值为 NULL。但是主键不能为 NULL&#xff0c;所以 MySQL 帮了你一个忙&#xff0c;将值转换为 0。这样&#xff0c;在第二次插入时就会出现冲突&#xff08;如果已经有一条记录为 0&…

微服务——服务治理

目录 1 什么是服务治理&#xff1f;2 为什么需要服务治理&#xff1f;3 服务治理的关键点3.1 服务注册与发现3.2 负载均衡3.3 容错与熔断3.4 服务监控与告警3.5 服务配置管理 4 示例说明5 总结 1 什么是服务治理&#xff1f; 简单来说&#xff0c;服务治理就是对微服务架构中的…

iptables(11)target(SNAT、DNAT、MASQUERADE、REDIRECT)

简介 前面我们已经介绍了ACCEPT、DROP、REJECT、LOG,这篇文章我们介绍SNAT、DNAT、MASQUERADE、REDIRECT,这几个参数的定义我们在上篇文章中都有介绍,我这里再列出回顾一下 DNAT(目标地址转换)和 SNAT(源地址转换) 原理:修改数据包的源或目标 IP 地址。通常用于 NAT(…

怎样利用 MATLAB 进行实时系统的建模与仿真?

要利用MATLAB进行实时系统的建模与仿真&#xff0c;您可以按照以下步骤进行操作&#xff1a; 确定系统的建模方法&#xff1a;根据实际情况&#xff0c;选择适合的建模方法&#xff0c;如&#xff1a;微分方程、状态空间模型、传递函数模型等。 编写系统模型的MATLAB代码&…

小迪安全v2023笔记 1-18

小迪安全v2023笔记 1-18 棱角社区 文章目录 1. 基础入门1. 正向shell与反向shell2. web应用3. 抓包&#xff0c;封包&#xff0c;协议&#xff0c;app&#xff0c;小程序&#xff0c;pc应用&#xff0c;web应用 2. 信息打点1. 常见信息获取2. 文件泄露3. 常见阻碍4. CDN绕过&a…