对象 B 包含一堆公共事件。
对象 A 订阅这些事件。
这些之间的UML关系是什么?
目前我有一个从对象 A 到对象 B 的定向关联。正确吗?还是应该朝另一个方向发展?
这取决于你想表达什么。
从逻辑上讲,订阅者 A 必须知道发布者 B,反之亦然,因此您具有双向关系。
从技术上讲,订阅通常不是由发布者 B 管理,而是由某个调度程序 D 管理。订阅者 A 知道调度程序 D,反之亦然。但是发布者 B 不知道 A,并且根据提供广播机制的平台,甚至可能不知道分发器 D。因此,如果您有一个特定的平台,请找出哪些类型的对象需要实例变量来引用其他的对象,并据此对关系进行建模。
应该存在从 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 可能都保持对彼此的引用。A 可能想取消订阅,而 B 当然必须能够通知 A 事件。因此,我将其建模为双向关系。您甚至可能希望 B 组成所有订阅实例。查看众所周知的观察者模式。