职责分配原则

Posted by Max on November 25, 2014

designpattern是关于类和对象的一种高效、灵活的使用方式,也就是说,必须先有类和对象,才能有设计模 式的用武之地,否则一切都是空谈。

GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配 软件模式”,共包括9种模式,描述了对象设计和职责分配的基本原则,是抽象出类和对象的最基本的指 导原则。

1. 信息专家(Information Expert)

信息专家模式(Information Expert)是GRASP模式中解决类的职责分配问题的最基本的模式。

设计对象/类时,如果某个类拥有完成某个职责所需要的所有信息,那么这个职责就应该分配给这个类 来实现。这时,这个类就是相对于这个职责的信息专家。

信息的拥有者类同时就是信息的操作者类,可以减少不必要的类关联;类的职责单一明确,易于理解。

2. 创造者(Creator)

创建者模式是GRASP模式中解决类的实例的创建职责问题的模式。符合下列任一条件时,应由类A来创 建类B,这时A是B的创建者:

  1. A是B的聚合
  2. A是B的容器
  3. A持有初始化B的信息(数据)
  4. A记录B的实例
  5. A频繁使用B

创建者模式,整个结构清晰易懂,防止职责的分散,降低耦合性,有利于类或组件的重用。

3. 高内聚 (High cohesion)

高内聚模式(High Cohesion)是GRASP模式中为降低类的复杂程度,简化控制而提出的面向对象设计 的原则性模式。功能性紧密相关的职责应该放在一个类里,并共同完成有限的功能。

聚集相关功能,可以使类结构清晰,更易理解;只聚集相关功能,又可使类的职责单一明确,从而降低 复杂度,更易使用。

4. 低耦合(Low coupling)

低耦合模式(Low Coupling)是GRASP模式中为降低类之间的关联程度,适应可变性而提出的面向对 象设计的原则性模式。尽可能地减少类之间的连接。

低耦合注重类的独立性,有利于重用和适应需求变化。当变化发生时,可以把影响缩小到最小范围。

高内聚、低耦合,是GRASP模式的核心概念,是其它GRASP模式的根本。

5. 控制器(Controller )

控制器模式是GRASP模式中解决事件处理职责问题的模式。

控制器模式提倡用一个专门的类来处理所有的系统事件。这样有利于防止同类职责的分散,满足高内聚, 低耦合原则,还有利于共通处理(前处理,后处理等,提高适应变化的能力,把变化的修改范围控制在 最小范围(控制器)之内。

6. 多态性(Polymorphism)

多态性模式是GRASP扩展模式之一,通过多态操作把基于类型的可变行为的定义职责分配给行为发生 的类。 与OO的多态含义相同,就是具有同一接口的不同对象对相同的消息具有不同的行为。

多态可以避免重复的代码和重复的分歧条件;多态易扩展,只要实现了统一的通用接口,便可实现行为 的扩展。

7. 纯虚构(Pure Fabrication)

纯虚构模式是GRASP扩展模式之一,提倡把那些非问题领域的职责分配给那些人工生成的或者容易实现 此类职责的概念类。

纯虚构模式符合高内聚、低耦合原则,易于重用。

8. 间接性(Indirection)

间接性模式是GRASP模式中解决类的关联问题的模式。

当多个类之间存在复杂的消息交互(关联)时,间接性模式提倡类之间不直接进行消息交互处理 (非直接),而是导入第三方类,把责任(多个类之间的关联责任)分配给第三方类,降低类之间的 耦合程度。

间接性模式也符合高内聚、低耦合原则,易于重用。

9. 变化预防模式(Protected Variations)

变化预防模式是GRASP扩展模式之一,通过设计稳定的接口来应对将来可能发生的变化或其它不安定的 因素。

有人把变化预防模式模式称为Don’t Talk to Strangers(别跟陌生人说话),别称Law of Demeter (LoD, 迪米特法则)。

变化预防模式可以提高系统对变化的应对能力。一旦系统的可预见的不安定因素发生变化(比如追加 功能等),只需要生成一个已有的稳定接口的实现类就可以了,无需修改原来的类。

变化预防模式也符合高内聚(具体的功能在各子类中实现,各类的内部功能具有高度聚集性)、低耦合 (用户类只跟稳定接口通信,减少了跟其它陌生对象的关联的机会,降低了类之间的耦合性)原则。

参考

  1. designpattern随笔系列:开篇-模式和原则