1

对象 B 包含一堆公共事件。

对象 A 订阅这些事件。

这些之间的UML关系是什么?

目前我有一个从对象 A 到对象 B 的定向关联。正确吗?还是应该朝另一个方向发展?

4

3 回答 3

0

这取决于你想表达什么。

从逻辑上讲,订阅者 A 必须知道发布者 B,反之亦然,因此您具有双向关系。

从技术上讲,订阅通常不是由发布者 B 管理,而是由某个调度程序 D 管理。订阅者 A 知道调度程序 D,反之亦然。但是发布者 B 不知道 A,并且根据提供广播机制的平台,甚至可能不知道分发器 D。因此,如果您有一个特定的平台,请找出哪些类型的对象需要实例变量来引用其他的对象,并据此对关系进行建模。

于 2016-05-03T09:41:49.543 回答
0

应该存在从 A 到 B 的依赖关系(从 A 指向 B 的虚线箭头)。UML 规范 2.5 版的第 7.8.4.1 章内容如下:

依赖关系是一种关系,表示单个模型元素或一组模型元素需要其他模型元素的规范或实现。

在您的情况下,A 需要 B 存在,但 B 不需要 A 存在。也许 B 需要 A 来实现一个特定的接口。在这种情况下,B 依赖于接口,但不依赖于 A 本身。

您建议建立从 A 到 B 的关联。关联比依赖更强大。这意味着 A 具有 B 类型的属性(好吧,定义有点复杂,请参阅 UML 规范的第 11.5.3.1 章)。这意味着 A 依赖于 B,就像依赖一样,但是依赖并不要求 A 具有 B 类型的属性。

总结一下:

  • 箭头应该从 A 指向 B,而不是从 B 指向 A(除非您对 B 的特定实现依赖于名为 A 的类的存在,这不太可能)。
  • 一个依赖就足够了,但是如果你想让 A 有一个 B 类型的属性,那么你可以画一个关联(实线)而不是一个依赖(虚线)。
于 2016-05-04T17:39:41.910 回答
0

A 和 B 可能都保持对彼此的引用。A 可能想取消订阅,而 B 当然必须能够通知 A 事件。因此,我将其建模为双向关系。您甚至可能希望 B 组成所有订阅实例。查看众所周知的观察者模式

于 2016-05-02T17:50:02.313 回答