图解高内聚与低耦合,傻瓜都能看懂!

简介: 图解高内聚与低耦合,傻瓜都能看懂!

模块


模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.


耦合主要描述模块之间的关系, 内聚主要描述模块内部. 模块的粒度可大可小, 可以是函数, 类, 功能块等等.


###


耦合


模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差.


比如模块A直接操作了模块B中数据, 则视为强耦合, 若A只是通过数据与模块B交互, 则视为弱耦合.


独立的模块便于扩展, 维护, 写单元测试, 如果模块之间重重依赖, 会极大降低开发效率.

image.png



内聚


###


模块内部的元素, 关联性越强, 则内聚越高, 模块单一性更强. 一个模块应当尽可能独立完成某个功能,


如果有各种场景需要被引入到当前模块, 代码质量将变得非常脆弱, 这种情况建议拆分为多个模块.


低内聚的模块代码, 不管是维护, 扩展还是重构都相当麻烦, 难以下手.


image.png


接口设计原则


###


好的接口应当满足设计模式六大原则, 很多设计模式, 框架都是基于高内聚低耦合这个出发点的.


单一职责原则: 一个类只负责一个功能领域中的相应职责.


开闭原则: 一个软件实体应当对扩展开放,对修改关闭.


里氏代换原则: 所有引用基类(父类)的地方必须能透明地使用其子类的对象.


依赖倒转原则: 抽象不应该依赖于细节, 细节应当依赖于抽象. 换言之, 要针对接口编程, 而不是针对实现编程.


接口隔离原则: 使用多个专门的接口, 而不使用单一的总接口, 即客户端不应该依赖那些它不需要的接口.


迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用, 例如外观模式, 对外暴露统一接口.


举几个栗子


*外观模式 *


为系统中多个子系统提供一致的对外调用, 对客户端隐藏子系统细节, 降低其与子系统的耦合.

image.png



桥接模式


JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离.image.png适配器模式

引入第三方库(hibernate, log4j), 不应该直接在代码中继承或者使用其实体类.

需要抽出上层统一接口, 然后增加实现类, 对外暴露接口.image.png推荐去我的博客阅读更多:


1.Java JVM、集合、多线程、新特性系列教程


2.Spring MVC、Spring Boot、Spring Cloud 系列教程


3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程


4.Java、后端、架构、阿里巴巴等大厂最新面试题


觉得不错,别忘了点赞+转发哦!


image.png

相关文章
|
5月前
|
人工智能 自然语言处理 前端开发
面向六个月后的 AI Code,也许影响的不只是前端
本文探讨了AI在编程领域的快速发展及其对程序员职业的影响。随着AI技术的不断进步,特别是Codebase Indexing和MCP(Model Context Protocol)等技术的应用,AI已能够更好地理解企业内部知识并生成符合项目规范的代码。文章指出,未来六个月AI代码生成将形成“规范驱动→知识沉淀→协议贯通→智能执行”的闭环架构,大幅提升开发效率。同时, Anthropic CEO Dario Amodei预测,初级程序员可能在18个月内被AI取代,强调了职业规划更新的重要性。文章还对比了Function Call与MCP的技术路线,并提供了相关参考链接。
529 71
面向六个月后的 AI Code,也许影响的不只是前端
|
Web App开发 iOS开发 Windows
ios获取原生系统应用的包名
ios获取原生系统应用的包名
2698 0
|
11月前
|
数据采集 人工智能 搜索推荐
《AI大模型助力客户对话分析解决方案评测》
该方案详细描述了AI客服对话分析的实践原理和实施方法,涵盖数据采集、预处理、特征提取、语义理解及可视化展示等环节。方案提供了较为详细的实施步骤,但在模型选型、特殊数据处理等方面存在不足。部署过程中,用户在数据采集对接和模型训练优化方面遇到困惑,希望获得更多实际案例和操作指导。示例代码基本可用,但在函数计算和第三方库兼容性上存在报错。总体而言,方案能满足基本对话分析需求,但需在准确性、实时性、个性化分析和结果解释性方面进一步改进。
297 1
|
7月前
|
存储 安全 算法
深入探讨区块链技术的安全性
深入探讨区块链技术的安全性
431 103
|
5月前
|
Ubuntu 安全 Docker
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
285 23
|
开发框架 前端开发 开发工具
一个小案例带你快速了解鸿蒙ArkUI的基本使用
一个小案例带你快速了解鸿蒙ArkUI的基本使用
501 4
|
传感器 边缘计算 安全
探索物联网:从概念到实际应用的全面介绍
本篇深入探讨了物联网的基础知识,包括概念、发展历程和应用领域。物联网作为连接物理世界与数字世界的桥梁,通过互联网连接和通信的方式,实现了设备之间的数据交换和智能控制。文章首先介绍了物联网的概念,将其定义为一种通过互联网连接的物理设备和传感器网络,可以实现数据传输和通信。接着,我们回顾了物联网的发展历程,从最早的RFID技术到现代的边缘计算和5G网络的结合,展示了物联网不断演进的趋势。
591 0
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
|
存储 机器学习/深度学习 人工智能
【LangChain系列】第一篇:文档加载简介及实践
【5月更文挑战第14天】 LangChain提供80多种文档加载器,简化了从PDF、网站、YouTube视频和Notion等多来源加载与标准化数据的过程。这些加载器将不同格式的数据转化为标准文档对象,便于机器学习工作流程中的数据处理。文中介绍了非结构化、专有和结构化数据的加载示例,包括PDF、YouTube视频、网站和Notion数据库的加载方法。通过LangChain,用户能轻松集成和交互各类数据源,加速智能应用的开发。
582 1
|
存储 定位技术 数据处理
Python读取指定的TXT文本文件并从中提取指定数据的方法
Python读取指定的TXT文本文件并从中提取指定数据的方法
575 1