模块

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

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

耦合

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

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

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

内聚

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

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

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

接口设计原则

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

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

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

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

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

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

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

举几个栗子

外观模式

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

桥接模式

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

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

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

    作者:大道方圆 来源:www.cnblogs.com/xdecode/p/9393885.html 模块 模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决 ...

  2. 什么是高内聚与低耦合?

    图解高内聚与低耦合 模块 模块就是从逻辑上将系统分解为更细微的部分, 分而治之, 复杂问题拆解为若干简单问题, 逐个解决. 耦合主要描述模块之间的关系, 内聚主要描述模块内部. 模块的粒度可大可小,  ...

  3. 小菜学设计模式——高内聚、低耦合

    2019独角兽企业重金招聘Python工程师标准>>> 背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习<大话设计模式>时的笔记摘要部分,当然,并不是记录 ...

  4. python模块化设计耦合度_什么是程序设计中的高内聚、低耦合?

    开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...

  5. 耦合式是什么意思_高内聚 ,低耦合 到底是什么意思?

    总会听到大牛们说到"高内聚,低耦合",不是特别明白,最近查阅了一些资料,才明白. '高内聚,低耦合'是相对于代码而言,一个项目中: 每个模块之间相互联系的紧密程度,模块之间联系越紧 ...

  6. 云小课|打造企业数据“高内聚,低耦合”--试试GaussDB(DWS)逻辑集群,实现数据物理隔离

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:逻辑集群是基于No ...

  7. 6. 以下耦合度中最松散的耦合是_什么是程序设计中的高内聚、低耦合?

    开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性.模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单.我们有两个定性的度量标准--耦合性和内聚性. ...

  8. 多模块顺序_软件架构基础 3: 什么是好的模块化代码?高内聚、低耦合如何衡量?...

    0. 写在前面 什么是好的代码?好的代码应该模块化. 王垠在其<编程的智慧>中也提到,要"写模块化的代码".(不对人做评价,这篇文章写得是非常好的.) 如果你读过< ...

  9. 什么叫高内聚、低耦合?

    耦合这个词,在开发人员里常常提到,但是很少有人解释耦合到底是什么?导致很多新手听见高内聚.低耦合这两个名词,就很奇怪,不知道到底说的是什么? 耦合,在开发中说的是所写的业务代码跨了几个动作,动作跨的越 ...

最新文章

  1. 姚殊清华计算机科学与技术,王道顺(清华大学计算机科学与技术系副教授)_百度百科...
  2. 学校的计算机教室火灾级别,学校教室火灾隐患有哪些
  3. 按键驱动的思路分析和代码实现
  4. Redis进阶-细说分布式锁
  5. NPV Formula in Excel
  6. IOC容器(底层原理解读)
  7. rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory
  8. 汇编程序开发环境搭配[转]
  9. shell脚本ssh登录并执行命令_Linux批量免密码SSH登录案例
  10. MVC过滤器详解 面向切面编程(AOP)
  11. oracle 9i故障恢复,Oracle9i rman备份恢复总结
  12. 推介英特尔® 黑带软件开发人员!
  13. Python零基础学习笔记(六)—— 变量和常量
  14. 差分进化算法(Differential Evolution)概述
  15. 那些年 我们一起追过的DIY三大件
  16. dpdk大页内存原理
  17. 机器阅读理解论文必读论文(二): Teaching Machines to Read and Comprehend
  18. Android运行项目时提示:No signature of method: build_*.android() is applicable for argument types
  19. 16s rRNA微生物分析报告如何获得关键和有用分析
  20. 快乐星球计算机老师,《快乐星球Ⅴ》新电脑老师(上)

热门文章

  1. 【python图像处理】图像的滤波(ImageFilter类详解)
  2. 【OpenCV3】级联分类器目标检测——cv::CascadeClassifier简介
  3. OpenJ_Bailian 4148 生理周期
  4. 【Android】startActivityForResult()与onActivityResult()与setResult()参数分析
  5. 面向对象程序设计基本概念
  6. 【iCore3 双核心板_ uC/OS-III】例程七:信号量——任务同步
  7. 悟透JavaScript (强烈推荐)
  8. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南(六) MiniGUI 提供的非 GUI/GDI 接口...
  9. Simulink代码生成: 延时模块及其代码
  10. MATLAB/simulink控制系统之传递函数模型