GRASP 9种模式整理

简介: GRASP整理

对《UML和模式应用》一书中的GRASP模式进行整理,便于查阅、温习
GRASP:General Responsibility Assignment Software Pattern,职责驱动对象的设计

9种模式

  1. 创建者
  2. 信息专家
  3. 低耦合
  4. 控制器
  5. 高内聚
  6. 多态
  7. 间接性
  8. 纯虚构
  9. 防止变异

原则

谁拥有、知晓信息,谁负责

信息专家

问题:给对象分配职责的基本原则是什么
方案:把职责分配给信息专家,它具有实现这个职责所必需的信息

创建者

问题:负责创建某类的新实例的职责
方案:B创建A,当:

     - B包含A;
     - B记录A;
     - B直接使用A;
     - B具有A的初始化数据;
     - B是对象A的创建者。

低耦合

问题:怎样降低依赖性,减少变化带来的影响,提高重用性
方案:利用这一原则来评估方案

耦合:是对某元素和其他元素之间的链接、感知和依赖程度的度量

控制器

问题:在UI层之上首先接收和协调系统操作的第一个对象是什么?
方案:控制器职责分配给以下之一:

     - 代表整个“系统”、“根对象”、运行软件的设备或主要子系统,这些是“外观控制器”的所有变体
     - 代表用例场景
     - 对于同一用例场景的所有系统事件使用相同的控制器。
    

## 高内聚
问题:怎样保持对象是有重点、可理解的、可管理的,并且能够保持低耦合
方案:利用高内聚评估候选方案

多态

问题:如何处理基于类型的选择?如何创建可插拔的软件构件
方案:当相关选择或行为随类型(类)不同时,使用多态操作为变化的行为类型分配职责。
推论:不要测试对象的类型,也不要使用条件逻辑来执行基于类型的不同选择。

纯虚构

问题:当你并不想违背高内聚和低耦合或其他目标,但是基于专家模式所提供的方案又不合适时,哪些对象应该承担这一职责?
方案:凭空虚构一个不代表问题领域概念的类,来承担这一职责。如数据库存储类

间接性

问题:为了避免两个或多个事物之间的直接耦合,应该如何分配职责?如何使对象解耦,一直吃低耦合并提高复用性的潜力?
方案:将职责分配给中介对象,使其作为其他构件或服务之间的媒介,以避免它们之间的直接耦合。中介实现了其他构件之间的间接性。

防止变异

问题:如何设计对象、子系统和系统,使其内部的变化或不稳定性不会对其他元素产生不良影响
方案:识别预计变化或不稳定支出,分配职责用以在这些变化之外创建稳定接口。

相关文章
|
3月前
|
编解码 前端开发
ATV和DTV(瞎乱草稿 笔记,没有条理,后续会整理)
ATV和DTV(瞎乱草稿 笔记,没有条理,后续会整理)
151 0
|
5月前
|
项目管理
49个项目管理过程ITTO整理(详细)(上)
49个项目管理过程ITTO整理(详细)
34 0
|
5月前
|
监控 项目管理
49个项目管理过程ITTO整理(详细)(下)
49个项目管理过程ITTO整理(详细)(下)
32 0
|
10月前
|
缓存 自然语言处理 小程序
这个迭代写了个小程序,顺便整理了一份笔记 📒 (4000字)
这个迭代写了个小程序,顺便整理了一份笔记 📒 (4000字)
137 0
|
11月前
|
Windows
R问题|代码太乱了,谁帮我整理下?
R问题|代码太乱了,谁帮我整理下?
64 0
|
JSON 前端开发 JavaScript
2022-6月工作问题整理记录
2022-6月工作问题整理记录
2022-6月工作问题整理记录
CPU结构整理(附Xmind整理)
CPU结构整理(附Xmind整理)
78 0
CPU结构整理(附Xmind整理)
|
存储 资源调度 算法
《计算机操作系统》重点知识笔记整理(一)(上)
《计算机操作系统》重点知识笔记整理(一)
|
存储 Unix 数据安全/隐私保护
《计算机操作系统》重点知识笔记整理(二)(下)
《计算机操作系统》重点知识笔记整理(二)
|
存储 算法 安全
《计算机操作系统》重点知识笔记整理(一)(下)
《计算机操作系统》重点知识笔记整理(一)