图解高内聚与低耦合,傻瓜都能看懂!
模块
模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决.
耦合主要描述模块之间的关系, 内聚主要描述模块内部. 模块的粒度可大可小, 可以是函数, 类, 功能块等等.
耦合
模块之间存在依赖, 导致改动可能会互相影响, 关系越紧密, 耦合越强, 模块独立性越差.
比如模块A直接操作了模块B中数据, 则视为强耦合, 若A只是通过数据与模块B交互, 则视为弱耦合.
独立的模块便于扩展, 维护, 写单元测试, 如果模块之间重重依赖, 会极大降低开发效率.
内聚
模块内部的元素, 关联性越强, 则内聚越高, 模块单一性更强. 一个模块应当尽可能独立完成某个功能,
如果有各种场景需要被引入到当前模块, 代码质量将变得非常脆弱, 这种情况建议拆分为多个模块.
低内聚的模块代码, 不管是维护, 扩展还是重构都相当麻烦, 难以下手.
接口设计原则
好的接口应当满足设计模式六大原则, 很多设计模式, 框架都是基于高内聚低耦合这个出发点的.
单一职责原则: 一个类只负责一个功能领域中的相应职责.
开闭原则: 一个软件实体应当对扩展开放,对修改关闭.
里氏代换原则: 所有引用基类(父类)的地方必须能透明地使用其子类的对象.
依赖倒转原则: 抽象不应该依赖于细节, 细节应当依赖于抽象. 换言之, 要针对接口编程, 而不是针对实现编程.
接口隔离原则: 使用多个专门的接口, 而不使用单一的总接口, 即客户端不应该依赖那些它不需要的接口.
迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用, 例如外观模式, 对外暴露统一接口.
举几个栗子
外观模式
为系统中多个子系统提供一致的对外调用, 对客户端隐藏子系统细节, 降低其与子系统的耦合.
桥接模式
JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离.
// 开发者只需要关注JDBC API, 无需关注不同数据库Driver接口实现
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
适配器模式
引入第三方库(hibernate, log4j), 不应该直接在代码中继承或者使用其实体类.
需要抽出上层统一接口, 然后增加实现类, 对外暴露接口.
// 代码与log4j强耦合, 不推荐
org.apache.log4j.Logger.getRootLogger().info("info");
// 底层可以随意更换log框架
FRLoggerFactory.getLogger().info("info");
作者:大道方圆
来源:www.cnblogs.com/xdecode/p/9393885.html
图解高内聚与低耦合,傻瓜都能看懂!相关推荐
- java内聚 耦合_图解高内聚与低耦合,傻瓜都能看懂!
作者:大道方圆 来源:www.cnblogs.com/xdecode/p/9393885.html 模块 模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决 ...
- 什么是高内聚与低耦合?
图解高内聚与低耦合 模块 模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决. 耦合主要描述模块之间的关系, 内聚主要描述模块内部. 模块的粒度可大可小, ...
- 小菜学设计模式——高内聚、低耦合
2019独角兽企业重金招聘Python工程师标准>>> 背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录 ...
- python模块化设计耦合度_什么是程序设计中的高内聚、低耦合?
开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...
- 耦合式是什么意思_高内聚 ,低耦合 到底是什么意思?
总会听到大牛们说到"高内聚,低耦合",不是特别明白,最近查阅了一些资料,才明白. '高内聚,低耦合'是相对于代码而言,一个项目中: 每个模块之间相互联系的紧密程度,模块之间联系越紧 ...
- 云小课|打造企业数据“高内聚,低耦合”--试试GaussDB(DWS)逻辑集群,实现数据物理隔离
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:逻辑集群是基于No ...
- 6. 以下耦合度中最松散的耦合是_什么是程序设计中的高内聚、低耦合?
开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...
- 多模块顺序_软件架构基础 3: 什么是好的模块化代码?高内聚、低耦合如何衡量?...
0. 写在前面 什么是好的代码?好的代码应该模块化. 王垠在其<编程的智慧>中也提到,要"写模块化的代码".(不对人做评价,这篇文章写得是非常好的.) 如果你读过< ...
- 什么叫高内聚、低耦合?
耦合这个词,在开发人员里常常提到,但是很少有人解释耦合到底是什么?导致很多新手听见高内聚.低耦合这两个名词,就很奇怪,不知道到底说的是什么? 耦合,在开发中说的是所写的业务代码跨了几个动作,动作跨的越 ...
最新文章
- 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...
- 学校的计算机教室火灾级别,学校教室火灾隐患有哪些
- 按键驱动的思路分析和代码实现
- Redis进阶-细说分布式锁
- NPV Formula in Excel
- IOC容器(底层原理解读)
- rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory
- 汇编程序开发环境搭配[转]
- shell脚本ssh登录并执行命令_Linux批量免密码SSH登录案例
- MVC过滤器详解 面向切面编程(AOP)
- oracle 9i故障恢复,Oracle9i rman备份恢复总结
- 推介英特尔® 黑带软件开发人员!
- Python零基础学习笔记(六)—— 变量和常量
- 差分进化算法(Differential Evolution)概述
- 那些年 我们一起追过的DIY三大件
- dpdk大页内存原理
- 机器阅读理解论文必读论文(二): Teaching Machines to Read and Comprehend
- Android运行项目时提示:No signature of method: build_*.android() is applicable for argument types
- 16s rRNA微生物分析报告如何获得关键和有用分析
- 快乐星球计算机老师,《快乐星球Ⅴ》新电脑老师(上)
热门文章
- 【python图像处理】图像的滤波(ImageFilter类详解)
- 【OpenCV3】级联分类器目标检测——cv::CascadeClassifier简介
- OpenJ_Bailian 4148 生理周期
- 【Android】startActivityForResult()与onActivityResult()与setResult()参数分析
- 面向对象程序设计基本概念
- 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
- 悟透JavaScript (强烈推荐)
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(六) MiniGUI 提供的非 GUI/GDI 接口...
- Simulink代码生成: 延时模块及其代码
- MATLAB/simulink控制系统之传递函数模型