GRASP模式概述


相关文章:

  1. 一篇搞懂OOA/OOD/OOP的区别
  2. 面向对象的基本原则-抽象,封装,继承,分解
  3. GRASP模式概述
  4. 面向对象的六大原则

简述

GRASP是通用职责分配软件模式(General Responsibility Assignment Software Patterns)的缩写,能够帮助我们理解基本对象的设计,提高面向对象设计(OOD)的觉悟。
GRASP总共有9中模式分别是:

  • 创建者(Creator)
  • 信息专家(Information Expert)
  • 低耦合(Low coupling)
  • 控制器(Controller)
  • 高内聚(High Cohesion)
  • 多态性(Polymorphism)
  • 纯虚构(Pure Fabrication)
  • 间接性(Indirection)
  • 防止变异(Protected Variations)

GRASP的通常的关系图
在这里插入图片描述

防止变异(Protected Variations)

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

低耦合(Low coupling)

问题:怎么降低依赖性,减少变化带来的影响,提高重用性
解决方案:分配职责时,使耦合性尽可能的低,利用这一原则评估方案。

Notice: 高耦合不是问题,问题是依赖了不稳的元素,一旦不稳定的元素改变,耦合的类就将改变。

高内聚(High Cohesion)

问题:怎么保持对象是有重点的,可理解的,可管理的,并且能够支持低耦合?
解决方案:分配职责可保持较高的内聚性。利用这一点来评估方案。内聚是对元素职责的相关性和集中度的度量。内聚低的类通常表示粗粒度的抽象,或承担了本应该委托给其他对象的职责。

创建者(Creator)

问题:应该由谁来创建某类的实例
解决方案:满足以下条件,应该由A类实例来创建B类的实例。

  • A包含或者聚集B
  • A记录B
  • A直接使用B
  • A具有B的初始化数据。

间接性(Indirection)

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

多态性(Polymorphism)

问题:如何处理基于类型的选择?如何创建可插拔的软件构件?
解决方案:当相关选择或行为随类型有所不同时,使用多态操作为变化的行为类型分配职责。

信息专家(Information Expert)

问题:给对象分配职责的基本原则是什么?
解决方案:把职责分配给具有完成职责所需信息的类。

纯虚构(Pure Fabrication)

问题:当不想违背高内聚和低耦合或者其他目标,但是基于专家模式提供的方案又不合适时,哪些对象应该承担这一职责。
解决方案:人为的制造一个类分配一组高内聚的职责,该类并不代表问题领域里面的概念,是需要的类,用以支持高内聚和低耦合。

控制器(Controller)

问题:在UI层之上接受和协调系统操作的的第一个对象是什么?
控制器是UI层之上的第一个对象,它负责接受和处理系统操作消息。
解决方案:把职责分配给能代表以下选择之一的类:

  • 代表整个"系统",“根对象”,运行软件的设备或主要子系统,这些是外观控制器的所有变体。
  • 代表用例场景,在该场中发生系统事件,通常命名为<UseCaseName>Handler<UseCaseName>Session

Notice: 此处的控制器模式不是MVC的C。它类似于MVC的C,MVP中的P。就是隔离UI层和业务层。

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值