作者:大道方圆

cnblogs.com/xdecode/p/9393885.html

模块

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

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

耦合

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

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

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

内聚

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

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

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

接口设计原则

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

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

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

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

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

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

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

举几个栗子

外观模式

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

桥接模式

JDBC中的把面向厂商的接口(Driver)和面向使用者的API(DriverManager)做了拆分隔离。

适配器模式

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

需要抽出上层统一接口, 然后增加实现类, 对外暴露接口。

-END-

看完本文有收获?请转发分享给更多人

关注「java程序媛之家」,提升Java技能

java的高内聚和低耦合_彻底弄懂高内聚与低耦合相关推荐

  1. 高铁招计算机专业吗,开高铁是什么专业_哪些学校有高铁专业?

    初中 一.开高铁是什么专业 开高铁的专业是高铁驾驶专业.初中生想从事高铁驾驶工作,首先要就读相关专业,获取驾驶高铁驾驶员入门卷.高铁驾驶需要学习的专业是高铁驾驶专业.以下是高铁驾驶专业的详细介绍. 初 ...

  2. 16位的数字高字节和低字节_显示8位数字的较低和较高半字节的掩蔽| 8086微处理器...

    16位的数字高字节和低字节 Problem: To show masking of lower and higher nibbles of 8-bit number using 8086 Microp ...

  3. 16位的数字高字节和低字节_掩盖8位数字的较低和较高半字节| 8085微处理器

    16位的数字高字节和低字节 Problem statement: 问题陈述: To mask lower and higher nibble of 8-bit number using 8085 Mi ...

  4. lolfps高但画面不流畅_全面解析:高刷新率真能提高FPS游戏技术?

    时隔多年再一次陪朋友座进网吧的时候,老实说我真的后悔了!这次网吧的游戏体验非常的糟糕,总感觉画面和动作并不流畅,经过几番探索之后我终于找到了原因,原来网吧电竞区的显示器刷新率居然只有60Hz!这对于游 ...

  5. 新手坐高铁怎么找车厢_一女子坐高铁回桂平坐过站,到了平南南站,怎么办?...

    点击上方" 掌上平南"即可关注掌上平南 如果您没有关注:掌上平南 就会少一个全面了解平南本土新鲜事物的平台 7月3日19时03分D3763次停靠桂平站一站台一对母子(何女士)下车后 ...

  6. 专升本高数第一章试题_专升本高数——第一章 函数极限与连续性

    专升本高数--第一章 函数极限与连续性 专升本高数--第一章 函数,极限与连续性 参考相关公式请进入:专升本高数--常用公式总结大全[补充扩展] https://blog.csdn.net/liu17 ...

  7. 苹果xsmax有高通基带吗_苹果将使用高通5G基带至2023年 之后或许从高通公司继续采购产品...

    VR日报10月25日消息,最近证实,苹果正在其新iPhone中使用高通的Snapdragon X55调制解调器.问题是苹果计划继续使用高通的技术多长时间?毕竟,该公司确实有充分的理由收购了英特尔的调制 ...

  8. stringbuilder调用tostring常量池_彻底弄懂java中的常量池

    作者:tracy_666链接:https://www.jianshu.com/p/55f65dac1b4b JVM常量池主要分为Class文件常量池.运行时常量池,全局字符串常量池,以及基本类型包装类 ...

  9. java接口防抖_彻底弄懂节流和防抖

    节流和防抖 这两个东西,你肯定听过,就是两种优化浏览器性能的手段.相关文章你肯定也看过,如果还是不太清楚,没关系,看完这篇短文,相信你能轻松理解其中差别. 防抖(deounce) 我们先说防抖吧,这里 ...

最新文章

  1. 2019智能手表推荐_智能手表一定越贵越好?试用过后这五款才真正值得推荐
  2. CV之IG:图像生成(Image Generation)的简介、使用方法、案例应用之详细攻略
  3. Unknown system variable 'tx_isolation'] with root cause
  4. 亚马逊记AWS(Amazon Web Services)自由EC2应用
  5. 使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
  6. 阿里P8架构师谈:高并发网站的监控系统选型、比较、核心监控指标
  7. 2021年PMP考试模拟题3(含答案)
  8. “双态IT”成就业务“互联网+”转型 —— 联想发布《联想双态IT白皮书》和“双态IT”解决方案家族...
  9. 详谈APP移动端 - 加壳与脱壳
  10. 一款好用的bi报表软件,让你站在Excel的肩膀上
  11. ubuntu鼠标指针替换
  12. Flink SQL CDC 13 条生产实践经验
  13. mvdbos php spider,yemtao
  14. Dreamweaver CS6下载及安装步骤
  15. apache端口转发 端口映射
  16. ColorOS 13流畅吗?看OPPO在系统上做了哪些升级?
  17. IDEA里面的各种小图标
  18. 数据结构与算法(1)--二叉树
  19. LeetCode 2248、多个数组求交集
  20. arr和arr的区别以及数组首元素地址和整个数组地址的区别

热门文章

  1. 模拟电子入门需要掌握的点(上)
  2. iOS10 适配 ATS(app支持https通过App Store审核) 韩俊强的博客
  3. SQL修改表字段名称及结构
  4. urllib和urllib2的区别和使用
  5. 大型API网关(六)—— 监控和预警
  6. 大数据开发实习生--------------------入职篇
  7. 立个Flag,2019加油!
  8. maple的Linux安装步骤,Linux下面如何安装maple,mathematica,matlab这类软件?
  9. 输入一行字符,分别统计出其中的英文字母大写小写、空格、数字和其它字符的个数。
  10. css_使div中的文本自动换行