GRASP模式概述

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

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

GRASP的通常的关系图

创建者(Creator)

问题:应该由谁来创建某类的实例
解决方案:满足以下条件,应该由A类实例来创建B类的实例。
- A包含或者聚集B
- A记录B
- A直接使用B
- A具有B的初始化数据。

信息专家(Information Expert)

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

低耦合(Low coupling)

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

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

控制器(Controller)

问题:在UI层之上接受和协调系统操作的的第一个对象是什么?
控制器是UI层之上的第一个对象,它负责接受和处理系统操作消息。
解决方案:把职责分配给能代表以下选择之一的类:
- 代表整个”系统”,“根对象”,运行软件的设备或主要子系统,这些是外观控制器的所有变体。
- 代表用例场景,在该场中发生系统事件,通常命名为HandlerSession

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

高内聚(High Cohesion)

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

多态性(Polymorphism)

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

纯虚构(Pure Fabrication)

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

间接性(Indirection)

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

防止变异(Protected Variations)

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

你可能感兴趣的:(面向对象)