[置顶] 欢迎您。今天是2023年03月30日。

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

问题:
当我们为系统发现完对象和职责之后,职责的分配原则(职责将分配给哪个对象执行)是什么?

解决方案:
职责的执行需要某些信息(information),把职责分配给该信息的拥有者。
换句话说,某项职责的执行需要某些资源,只有拥有这些资源的对象才有资格执行职责。
这有点类似现实世界的“有能者为之”的概念。你有建筑知识,可以去执行盖楼的职责;你有法律知识,可以去裁判案件等等。
满足了面向对象设计的封装性的设计,一般情况下都会满足Information Expert模式。因为Information Expert是 对类的属性(信息),以及对类的属性的操作的封装,它符合对象封装性的概念。

优点:

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

Information Expert例

为了说明问题,我们使用“学生成绩管理系统”中的用例1来说明。
用例1:
- 管理员创建题库(把题条加入题库)
再细化一下:
- 管理员创建题库(把题条加入题库):如果题库中已经存在所给的题条,则退出,否则加入题条。
这样就存在3个对象:管理员用户User,题条SubjectItem,题库SubjectLibrary
2个职责:判断(新加入的题条是否与题库某题条相等),加入(题条的加入)

这2个职责究竟应该由哪个对象执行?

我们使用Information Expert模式来分析。

  1. 判断2个题条是否相等,只要判断题条的ID属性(或其它属性)是否相等就可以了。题条的ID是属于题条的,所以对它的操作应该放在题条SubjectItem里。
  2. 题条的加入需要操作的数据有2部分,一部分是新加入的题条本身,另一部分是题库(加入到题库),题条是题库的一部分,所以题条的加入应该放在题库SubjectLibrary里完成。

如果把以上2个职责放在第三方类中,无疑增加了它们与第三方类之间的耦合关系。

您可能也喜欢

GRASP是General Responsibility Assignment Software patterns(通用职责分配软件模式)的简称,它的核心思想是“职责分配(Responsibility Assignment)”。GRASP提出了几个基本原则,用来解决面向对象设计的一些问题。

创建者模式(Creator)是GRASP模式中解决类的实例的创建职责问题的模式。

高内聚模式(High Cohesion)是GRASP模式中为降低类的复杂程度,简化控制而提出的面向对象设计的原则性模式。高内聚(High Cohesion)与低耦合(Low Coupling)模式是GRASP其他模式的根本。

二维码
摄像头