高内聚低耦合举个例子详细介绍

学习目标:

  • 高内聚低耦合举个例子详细介绍

学习内容:

高内聚和低耦合是软件设计中的两个重要原则,旨在提高系统的可维护性、可扩展性和灵活性。下面我们通过一个例子详细介绍高内聚和低耦合的概念及其实现方法。

例子:在线购物系统

场景描述
假设我们正在设计一个在线购物系统,该系统包括以下功能:

  • 用户管理
  • 商品管理
  • 订单处理
  • 支付处理

高内聚
高内聚指的是类或模块内部的元素紧密相关,共同完成一个单一的任务或功能。内聚性越高,类或模块的职责越单一,代码的可理解性和可维护性就越高。

示例:订单类
订单类负责管理与订单相关的所有功能,如添加商品、计算总价等。

// 商品类
public class Product {private String id;private String name;private double price;public Product(String id, String name, double price) {this.id = id;this.name = name;this.price = price;}public String getId() {return id;}public String getName() {return name;}public double getPrice() {return price;}
}// 订单项类
public class OrderItem {private Product product;private int quantity;public OrderItem(Product product, int quantity) {this.product = product;this.quantity = quantity;}public Product getProduct() {return product;}public int getQuantity() {return quantity;}public double getItemTotal() {return product.getPrice() * quantity;}
}// 订单类
import java.util.ArrayList;
import java.util.List;public class Order {private List<OrderItem> items;public Order() {items = new ArrayList<>();}public void addItem(Product product, int quantity) {OrderItem item = new OrderItem(product, quantity);items.add(item);}public double calculateTotal() {double total = 0;for (OrderItem item : items) {total += item.getItemTotal();}return total;}
}

在这个示例中,Order类高度内聚,因为它负责与订单相关的所有操作:添加商品和计算总价。OrderItem类和Product类分别负责订单项和商品的信息,职责单一明确。

低耦合
低耦合指的是类或模块之间的依赖关系尽量松散,减少相互之间的直接依赖。耦合度越低,系统的灵活性和可维护性就越高。

示例:支付处理
在支付处理中,我们可以通过接口和抽象类来实现低耦合,使得系统可以轻松扩展不同的支付方式。

// 支付策略接口
public interface PaymentStrategy {void pay(double amount);
}// 信用卡支付实现
public class CreditCardPayment implements PaymentStrategy {private String cardNumber;public CreditCardPayment(String cardNumber) {this.cardNumber = cardNumber;}@Overridepublic void pay(double amount) {// 信用卡支付逻辑System.out.println("Paid " + amount + " using Credit Card.");}
}// 支付宝支付实现
public class AlipayPayment implements PaymentStrategy {private String alipayId;public AlipayPayment(String alipayId) {this.alipayId = alipayId;}@Overridepublic void pay(double amount) {// 支付宝支付逻辑System.out.println("Paid " + amount + " using Alipay.");}
}// 订单类中的支付处理
public class Order {private List<OrderItem> items;private PaymentStrategy paymentStrategy;public Order() {items = new ArrayList<>();}public void addItem(Product product, int quantity) {OrderItem item = new OrderItem(product, quantity);items.add(item);}public double calculateTotal() {double total = 0;for (OrderItem item : items) {total += item.getItemTotal();}return total;}public void setPaymentStrategy(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void pay() {double amount = calculateTotal();paymentStrategy.pay(amount);}
}

在这个示例中,PaymentStrategy接口定义了支付策略,而具体的支付方式(如信用卡支付和支付宝支付)通过实现这个接口来定义各自的支付逻辑。Order类通过设置支付策略来完成支付处理,而无需了解具体的支付实现。这种设计降低了类之间的耦合度,使得添加新的支付方式变得简单而不影响现有代码。

总结

通过高内聚和低耦合的设计,我们可以创建一个更清晰、更易维护、更灵活的系统。高内聚确保类或模块职责单一,代码更易理解和维护;低耦合通过减少类或模块之间的依赖关系,提高系统的可扩展性和灵活性。这两个原则在软件设计中相辅相成,帮助我们构建健壮的系统。


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

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

相关文章

聊天交友系统开发专业语聊交友app开发搭建同城交友开发婚恋交友系统相亲app开发

1、上麦相亲互动:直播间内除了红娘外&#xff0c;还有男女用户两个视频麦位&#xff0c;直播间符合要求的用户可以申请上麦 2、公屏聊天:为上麦用户可以通过在公屏发言的方式参与直播间内的话题互动。 3、私信,异性用户之间可以发送私信消息&#xff0c;通过付费或开通会员可解…

法国工程师IMT联盟 密码学及其应用 2023年期末考试补考题

1 JAVA 安全 1.1 问题1 1.1.1 问题 用 2 或 3 句话解释 Java 执行模型&#xff08;Java 虚拟机machine virtuelle Java)&#xff09;中引入introduit沙箱bac sable机制 mcanisme d’excution par isolation的目的。 1.1.2 问题解释 在 Java 执行模型&#xff08;Java 虚拟机…

知识见闻 - 什么是SAT求解器

SAT求解器&#xff08;SAT solver&#xff0c;布尔可满足性问题求解器&#xff09;是一种计算工具&#xff0c;用于确定是否存在一个变量赋值&#xff0c;使给定的布尔公式为真。布尔可满足性问题是计算理论中的一个重要问题&#xff0c;通常用来解决逻辑推理、验证和优化问题。…

Java面试八股文

一、Redis 1. 使用场景 &#xff08;1&#xff09;Redis的数据持久化策略有哪些 RDB&#xff1a;全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫作Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故…

【信息系统项目管理师】18年~23年案例概念型知识

文章目录 18上18下19上19下20上20下21上21下22年上22年下23年上 18上 请简述 ISO 9000 质量管理的原则 领导作用、 过程方法、 管理的系统方法、 与供方互利的关系、 基于事实的决策方法、 持续改进、 全员参与、 以顾客为关注焦点 概念 国家标准(GB/T 1 9000 2008)对质量的定…

JS如何把年月日转为时间戳

在JavaScript中&#xff0c;将年月日&#xff08;通常表示为一个字符串或者分别的年、月、日数字&#xff09;转换为时间戳&#xff08;即Unix时间戳&#xff0c;是自1970年1月1日&#xff08;UTC/GMT的午夜&#xff09;开始所经过的秒数&#xff0c;不考虑闰秒&#xff09;可以…

【proteus经典实战】VB上位机程序控制DS1302时钟的proteus仿真

一、简介&#xff1a; VB上位机程序控制DS1302时钟是一种常见的应用&#xff0c;DS1302是一款实时时钟芯片&#xff0c;通常用于计算机、电子设备或其他系统中&#xff0c;以提供时间戳和其他时间相关功能&#xff0c;DS1302时钟芯片通常需要外部电源供电&#xff0c;并且具有…

嵌入式c语言2——预处理

在c语言中&#xff0c;头部内容&#xff0c;如include与define是不参与编译而直接预先处理的 如include相当于把头文件扩展&#xff0c;define相当于做了替换 c语言大型工程创建时&#xff0c;会有调试版本与发行版本&#xff0c;发行时不希望看到调试部分内容&#xff0c;此时…

基于多视点编码光场的全景三维重建方法

欢迎关注GZH《光场视觉》 摘要&#xff1a;在基于光场的一系列应用中&#xff0c;目标的三维重建是基础且关键的任务。普通光场只能重建单一视角而无法重建全景&#xff0c;并且在纹理特征匮乏的区域也无法生成准确的三维信息。针对以上问题&#xff0c;提出一种基于多视点编码…

存算一体架构或成为AI处理器技术发展关键

©作者|坚果 来源|神州问学 引言 马斯克巨资60亿美元打造的“超级算力工场”&#xff0c;通过串联10万块顶级NVIDIA H100 GPU&#xff0c;不仅震撼了AI和半导体行业&#xff0c;促使英伟达股价应声上涨6%&#xff0c;还强烈暗示了AI大模型及芯片需求的急剧膨胀。这一行动…

【学习积累】自然资源全领域基本知识

【学习积累】自然资源领域基本知识 土地篇 1、我国土地管理的基本国策和基本国情是什么? 答&#xff1a;基本国策是十分珍惜、合理利用土地和切实保护耕地。基本国情是人多地少&#xff0c;耕地后备资源严重不足 2、耕地保护对我国经济社会发展有何作用? 答&#xff1a;…

数字化精益生产系统--RD研发管理系统

R&D研发管理系统是一种用于管理和监督科学研究和技术开发的软件系统&#xff0c;其设计和应用旨在提高企业研发活动的效率、质量和速度。以下是对R&D研发管理系统的功能设计&#xff1a;

hive命令和参数

一.命令行模式 hive命令行 hive -H 查询hive的可用参数 hive -e "" 在hive命令中直接执行简单的sql语句 在hive命令中执行sql文件 hive -f 文件地址 在hive命令中新建hive变量 hive --hivevar mykey"myvalue" beeline命令行 先得启动hiveserver…

电力授时设备常用:低功耗定位授时模块ATGM332D-5T

ATGM332D有5N微星定位模块系列和5T授时模块&#xff0c;其中我们今天要解读的是一款拥有高性能、低功耗、低成本优势且适用于各类授时设备并支持BDS/GNSS的定位授时模块ATGM332D-5T。 该系列模块产品是基于中科微第四代低功耗GNSS SOC单芯片—AT6558&#xff0c;支持多种微星导…

第四十六章 解决 IRIS 中的 SOAP 问题

文章目录 第四十六章 解决 IRIS 中的 SOAP 问题故障排除所需的信息IRIS SOAP 日志 第四十六章 解决 IRIS 中的 SOAP 问题 本主题提供信息来帮助识别 IRIS 数据平台中 SOAP 问题的原因。 有关明显与安全相关的问题的信息&#xff0c;请参阅故障排除安全问题。在极少数情况下&a…

使用Spring Boot和Docker进行容器化部署

使用Spring Boot和Docker进行容器化部署 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何利用Spring Boot和Docker来实现应用程序的容器化部署…

大数据开发语言 Scala(四):面向对象编程

目录 1. 概述 2. 面向对象编程的基本概念 2.1 类和对象 2.2 继承和多态 2.3 封装和访问控制 3. 面向对象编程在大数据开发中的应用 3.1 Spark中的面向对象编程 3.2 面向对象编程在数据清洗和预处理中 3.3 面向对象编程在机器学习中的应用 4. 面向对象编程的高级特性 …

adb简介

ADB 的实现涉及到多个组件和多个步骤。下面是详细的实现过程&#xff1a; 1. 架构组成 ADB Client&#xff1a;运行在主机上&#xff0c;用户通过它发送命令。ADB Daemon&#xff08;adbd&#xff09;&#xff1a;运行在Android设备上&#xff0c;负责接收和执行来自ADB Clie…

PyCharm远程开发

PyCharm远程开发 1- 远程环境说明 每个人的本地电脑环境差别很大。各自在自己电脑上开发功能&#xff0c;测试/运行正常。但是将多个人的代码功能合并&#xff0c;运行服务器上&#xff0c;会出现各种版本兼容性问题。 在实际企业中&#xff0c;一般会有两套环境。第一套是测…

中小企业如何防止被查盗

在当前的商业环境中&#xff0c;小企业面临诸多挑战&#xff0c;其中之一便是如何在有限的预算内满足日常运营的技术需求。由于正版软件的高昂成本&#xff0c;一些小企业可能会选择使用盗版软件来降低成本。 我们联网之后存在很多风险&#xff0c;你可以打开自己的可以联网的电…