Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >图解高内聚与低耦合

图解高内聚与低耦合

作者头像
用户1216491
发布于 2018-08-28 07:46:02
发布于 2018-08-28 07:46:02
1.7K00
代码可运行
举报
文章被收录于专栏:xdecodexdecode
运行总次数:0
代码可运行

模块

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

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

耦合

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

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

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

 内聚

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

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

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

接口设计原则

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

  1. 单一职责原则: 一个类只负责一个功能领域中的相应职责.
  2. 开闭原则: 一个软件实体应当对扩展开放,对修改关闭.
  3. 里氏代换原则: 所有引用基类(父类)的地方必须能透明地使用其子类的对象.
  4. 依赖倒转原则: 抽象不应该依赖于细节, 细节应当依赖于抽象. 换言之, 要针对接口编程, 而不是针对实现编程.
  5. 接口隔离原则: 使用多个专门的接口, 而不使用单一的总接口, 即客户端不应该依赖那些它不需要的接口.
  6. 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用, 例如外观模式, 对外暴露统一接口.

举几个栗子

外观模式

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

桥接模式

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         // 开发者只需要关注JDBC API, 无需关注不同数据库Driver接口实现
2         Class.forName("com.mysql.jdbc.Driver");
3         Connection conn = DriverManager.getConnection(url, username, password);

适配器模式

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1         // 代码与log4j强耦合, 不推荐
2         org.apache.log4j.Logger.getRootLogger().info("info");
3         // 底层可以随意更换log框架
4         FRLoggerFactory.getLogger().info("info");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件设计之——“高内聚低耦合”
耦合度 一、什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。 内聚和耦合密切相关,同其它模块存在强耦合关系的模块常意味这弱内聚,强内聚常意味着弱耦合。 耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计
全栈程序员站长
2022/07/07
7670
一文读懂何为高内聚低耦合
在软件开发中,耦合是指两个或多个模块之间的依赖程度。当一个模块的改变会影响到另一个模块时,说明这两个模块是耦合的。耦合程度越高,模块之间的依赖性越强,意味着更改一个模块时可能会带来连锁反应,影响到其他模块的功能和行为。
Srlua
2024/10/16
1.3K0
一文读懂何为高内聚低耦合
遵循SOLID原则:构建高内聚低耦合的代码
SOLID原则是面向对象设计的五个基本原则,它们可以指导我们在实际项目中遵循最佳实践。
陆业聪
2024/07/23
1520
遵循SOLID原则:构建高内聚低耦合的代码
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day30】—— 设计模式1
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
2680
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day30】—— 设计模式1
深入浅出“设计模式”- 最易懂的设计模式解析
前言 最近在对项目进行重构,希望能利用设计模式使得自己的代码能更加简化 & 优雅一些,所以对设计模式进行了一系列的总结 今天我带你来了解一切关于设计模式的知识。 目录 1. 定义 某类特定问题的代码设
Carson.Ho
2019/02/22
4400
用大白话告诉你什么是低耦合|高内聚
        首先我们来看看内聚的含义:软件含义上的内聚其实是从化学中的分子的内聚演变过来的,化学中的分子间的作用力,作用力强则表现为内聚程度高。在软件中内聚程度的高低,标识着软件设计的好坏。
不会飞的小鸟
2020/03/22
7.4K0
《23种设计模式(Java版)》| 设计模式相关简介。
设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式的本质提高软件的维护性,通用性和扩展性,并降低软件的复杂度。设计模式并不局限于某种语言,java,php,c++ 都有设计模式
百思不得小赵
2022/12/01
2710
《23种设计模式(Java版)》| 设计模式相关简介。
高内聚与低耦合_低内聚高耦合是一个好设计的特征吗
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说高内聚与低耦合_低内聚高耦合是一个好设计的特征吗,希望能够帮助大家进步!!!
Java架构师必看
2022/09/12
9230
高内聚与低耦合_低内聚高耦合是一个好设计的特征吗
低耦合高内聚 原则的应用
这次主要是分享对软件设计中的“低耦合、高内聚”原则的一些个人体会,通过lorawan代码等实例分析,让大家对这个设计思想有一些具象的理解。
twowinter
2020/04/17
1.1K0
七大原则+23种设计模式
编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,复用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的
devi
2021/08/18
3.2K0
五万字详解“GoF”的23种设计模式
1995 年,GoF(Gang of Four,四人组,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人组成)合作出版了 **《Design Patterns: Elements of Reusable Object-Oriented Software》 **一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称【GoF设计模式】。
栗筝i
2022/12/09
3.2K2
五万字详解“GoF”的23种设计模式
【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
开闭原则 是 面向对象 设计 中 , 最基础的 设计原则 , 它指导我们建立稳定灵活的系统 ;
韩曙亮
2023/03/29
1.4K0
【设计模式】设计模式总结 ( 七大设计原则 | 创建型模式 | 结构型模式 | 行为型模式 ) ★★★
Gof23设计模式趣味详解(三分钟上手系列)
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,从而使你写的代码可重用性更高、可读性更强、可靠性更高、灵活性更好、可维护性更强
bboy枫亭
2020/09/22
4000
设计模式---外观模式
引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。
大忽悠爱学习
2021/11/15
3000
⭐️C#零基础到入门 ⭐️| 带你认识编程中的—23种设计模式 & 六大设计原则
设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。设计模式使代码开发真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。只有夯实地基搭好结构,才能盖好坚壮的大楼。也是我们迈向高级开发人员必经的一步。 总结:设计模式是设计经验的总结
呆呆敲代码的小Y
2021/08/20
2370
分布式系统关注点(13)——「高内聚低耦合」详解
作为被通知人,如果在你的现实工作中也发生了类似事件,我相信哪怕嘴上不说,心里也会有不少想法和抱怨:“md,改的是你,我也要发布,好冤啊!”。
Zachary_ZF
2019/03/05
6490
Java二十三种设计模式-外观模式(9/23)
外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的高层接口。外观模式定义了一个可以与复杂子系统交互的简化接口,使得子系统更加易于使用。
正在走向自律
2024/12/18
990
Java二十三种设计模式-外观模式(9/23)
设计模式概述
设计模式是软件工程中的一种最佳实践,它描述了软件设计过程中一些常见问题的解决方案。这些模式是经过验证的、可重用的设计方案,可以帮助开发者解决特定的问题,提高代码的可重用性、可读性和可靠性。
码事漫谈
2024/12/20
1380
设计模式概述
C#设计模式总结
  经过这段时间对设计模式的学习,自己的感触还是很多的,因为我现在在写代码的时候,经常会想想这里能不能用什么设计模式来进行重构。所以,学完设计模式之后,感觉它会慢慢地影响到你写代码的思维方式。这里对设计模式做一个总结,一来可以对所有设计模式进行一个梳理,二来可以做一个索引来帮助大家收藏。
莫问今朝
2019/02/25
1.8K0
软件开发中的原则
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。(Every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class.),即又定义有且仅有一个原因使类变更。
lyb-geek
2018/07/26
5920
软件开发中的原则
推荐阅读
相关推荐
软件设计之——“高内聚低耦合”
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文