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

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

模块


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


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


###


耦合


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


比如模块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

相关文章
|
机器人 Windows
QQ机器人有哪些?QQ机器人怎么设置?
随着QQ群的活跃,越来越多的群组需要用机器人来管理群,比较流行的QQ机器人有哪些?QQ机器人又需要怎么设置?目前市面上有很多QQ群机器人,其中比较流行的有第十代qq机器人、酷q机器人等。这些机器人都有各自的特点和功能,可以满足不同的需求,具体需要怎么设置机器人呢?下面就拿第十代QQ机器人给大家举例。
Cadence原理图查看PIN总数
Cadence原理图查看PIN总数
2376 0
|
数据采集 人工智能 搜索推荐
《AI大模型助力客户对话分析解决方案评测》
该方案详细描述了AI客服对话分析的实践原理和实施方法,涵盖数据采集、预处理、特征提取、语义理解及可视化展示等环节。方案提供了较为详细的实施步骤,但在模型选型、特殊数据处理等方面存在不足。部署过程中,用户在数据采集对接和模型训练优化方面遇到困惑,希望获得更多实际案例和操作指导。示例代码基本可用,但在函数计算和第三方库兼容性上存在报错。总体而言,方案能满足基本对话分析需求,但需在准确性、实时性、个性化分析和结果解释性方面进一步改进。
464 1
|
4月前
|
Ubuntu Linux 数据安全/隐私保护
Ubuntu系统安装详细教程
确认您的选择无误后,安装程序将正式启动。请耐心等待,直至程序运行完毕并提示您重启。随后,您可以安全地移除安装盘,并重启计算机。至此,系统安装已全部完成!
|
10月前
|
存储 安全 算法
深入探讨区块链技术的安全性
深入探讨区块链技术的安全性
676 103
|
数据采集 JSON 数据可视化
基于Python的全国主要城市天气数据可视化大屏系统
本文介绍了一个基于Python开发的全国主要城市天气数据可视化大屏系统,该系统利用requests库进行数据采集、Pandas进行数据处理与分析,并采用Echarts和Flask实现数据的可视化展示和Web交互,以直观、实时地呈现天气变化趋势。
774 2
基于Python的全国主要城市天气数据可视化大屏系统
|
缓存
计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)
计算机网络——数据链路层-可靠传输的实现机制:选择重传协议SR(介绍、工作原理、窗口尺寸、题目练习)
1333 1
|
Oracle 关系型数据库 索引
唯一约束和唯一索引区别
唯一约束和唯一索引区别
|
存储 定位技术 数据处理
Python读取指定的TXT文本文件并从中提取指定数据的方法
Python读取指定的TXT文本文件并从中提取指定数据的方法
678 1
|
XML 自然语言处理 数据格式
如何使用中文维基百科语料
前言 在做自然语言处理时很多时候都会需要中文语料库,高质量的中文语料库较难找,维基百科和百度百科算是比较不错的语料库。
3158 0