系统设计

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

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

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

高内聚低耦合

耦合

耦合(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值