博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系统设计
阅读量:4884 次
发布时间:2019-06-11

本文共 1463 字,大约阅读时间需要 4 分钟。

耦合是指模块间联系的紧密程度, 内聚是指模块内处理单元连续的紧密程度.

高内聚低耦合的模块设计, 便于进行软件开发和维护.

设计模式是为了减少模块耦合,增强模块内聚而提出一系列设计指导性原则.

高内聚低耦合

耦合

耦合(coupling)也称块间联系,是指软件系统结构中各模块间相互联系紧密程度。

耦合的强度依赖于以下几个因素:

  • 一个模块对另一个模块的调用

  • 一个模块向另一个模块传递的数据

  • 模块之间接口的复杂程度

耦合类型从强到弱可以分为:

  1. 内容耦合:当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。

  2. 公共耦合: 一组模块都访问同一个全局数据结构,则称之为公共耦合。公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

  3. 外部耦合: 一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合。

  4. 控制耦合:一个模块通过接口传递一个信号控制另一个模块,称为控制耦合。

  5. 标记耦合:调用模块和被调用模块之间传递数据结构而不是简单数据,同时也称作特征耦合。

  6. 数据耦合:调用模块和被调用模块之间只传递简单的数据项参数。

  7. 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。

内聚

内聚(cohesion)又称块内联系,是指一个模块内部各个元素彼此结合的紧密程度。

内聚类型从强到弱可以分为:

  1. 功能内聚:模块内所有元素的各个组成部分全部都为完成同一个功能而存在,模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可。

  2. 顺序内聚:一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行。 通常前一个处理元素的输出是后一个处理元素的输入。

  3. 信息内聚:指模块内各个组成部分都使用相同的数据或产生相同的数据结构, 也称为通信内聚。

  4. 过程内聚:一个模块内的处理元素必须以特定次序执行,允许处理元素之间没有数据进行传递。

  5. 时间内聚: 一个模块内的处理元素同时执行称为时间内聚。

  6. 逻辑内聚: 几种相关的功能组合在一起, 每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能 ,称为逻辑内聚。

  7. 偶然内聚: 一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起, 也称巧合内聚。

设计模式

Filters 过滤器

过滤器设计模式是让数据流通过一系列过滤器, 以使用过滤器处理数据流. 如Web Server通过过滤器链处理Web请求.

793413-20160620171041569-1870996087.png

优点在于:

  • I/O关系表示明确

  • 易于复用和修改

  • 允许并发执行

缺点在于:

  • 不适合交互式应用

Layering

将软件系统分为多层, 每一层只调用其下的一层, 只被其上一层调用. 典型应用如MVC模式, TCP/IP协议族.

优点:

  • 耦合程度小, 便于修改

缺点:

  • 设计阶段定义多层抽象困难

  • 可能产生性能问题

Repositories

仓库模式又称为黑板模式, 不同的模块可以访问和修改同一块共享数据区. 如共享同一个数据库的多个web应用.

Interpreters

解释器模式将解释器与脚本分离, 常见应用如各种脚本语言的解释器.

clip_image008_2.gif

Implicit Invocation 隐式调用

该模式典型应用为事件驱动模型, 首先在eventloop中注册handler, 在事件发生时由eventloop发布广播调用handler进行处理.

转载于:https://www.cnblogs.com/Finley/p/5600396.html

你可能感兴趣的文章
six day--面向对象
查看>>
python队列、线程、进程、协程(转)
查看>>
java 计算 1到10 的 阶层的和(采用递归的方法)
查看>>
在react项目当中使用redux
查看>>
游戏开发之UE4添加角色到场景中
查看>>
gulp创建完整的项目流程
查看>>
APICloud开发小技巧(一)
查看>>
UVa548
查看>>
如何在SpringBoot中集成JWT(JSON Web Token)鉴权
查看>>
python的pydoc与help
查看>>
js动画实现透明度动画
查看>>
css3实现圆形逐渐减少动画
查看>>
D24_02_页面驻留(page Frame)
查看>>
基于Boost无锁队列实现的内存池
查看>>
HDU-4861-Couple doubi(数学题,难懂!难懂!)
查看>>
sublime text 输入法不跟随光标
查看>>
java多态
查看>>
highchart 图标 时钟的使用
查看>>
牛客OI赛制测试赛2(0906)
查看>>
1005—I Think I Need a Houseboat
查看>>