GRASP 9种模式整理

对《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层之上首先接收和协调系统操作的第一个对象是什么?
方案:控制器职责分配给以下之一:

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

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

多态

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

纯虚构

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

间接性

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

防止变异

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值