Java: 是否可以通过观察者层次结构通知观察者变化?

Java: Can an Observer be notified of changes through a hierarchy of observers?

所以我有几个 classes 只是 Observers,另一个既是 Observer 又是 Observable,第三个只是 Observable。

我希望能够获取两者兼有的 class 并通知一些 Observers 只有 Observable 的 class 已经改变。因此,Observer 和 Observable class 实际上并没有改变自己,而是在 Observable 只有一个改变时通知 Observers(因此,让观察者 运行 他们的更新方法)。

这有可能吗?是否必须更改 Observable 以使其通知观察者?我什至会怎么做呢?

编辑:我发现我的设计存在问题:

当update方法接受一个Observable o时,我不确定这个o是ObserverObservable还是ObservableOnly的实例,所以问题由此产生。我必须为两者设定条件,并创建一个 ObservableOnly 实例或一个 class/methods 实例,它从 Observable 获取信息只是作为 Observer 中的一个字段。

当然可以。

您应该问自己一些问题来阐明您的设计:

  • 为什么 Observer-only class 不直接观察 Observable-only class?

  • Observer-only class 如何了解 Observable-only class 变化的细节?

  • Observer-and-Observableclass是只负责转发更新通知,还是在你的设计中还有其他作用?

代码方面,我认为 class 具有观察者和主体的行为没有问题。如果您正在使用接口,observer/observable 应该只实现这两个接口。

如果您的整体实现是干净的,那么将两种行为合而为一 class 应该不是问题,请随意提交一些代码,我们可以从设计模式的角度对其进行评论。

我读到一些可能有用但我自己没有实现的东西。

简而言之,您将创建一个 'linked observer' 链,其中每个观察者都可以持有一个 'observer' 变量 next_,并且当您通知观察者更改时,您将递归遍历链接的观察者。

while (observer != NULL)
{
  observer.onNotify(entity, event);
  observer = observer.next_;
}

实际阅读的文章在这里;
http://gameprogrammingpatterns.com/observer.html#linked-observers

如前所述,绝对有可能。

我花了一些时间编写了一些简单的代码,其中我为观察者和可观察者使用了 java 接口。 (我想值得一提的是,我使用的是观察者的轮询版本,而不是推送。)

http://pastebin.com/M2CY82wd

代码并不完美,但希望它能向您展示它的样子。

此外,这是我和许多其他人推荐的一本书: http://shop.oreilly.com/product/9780596007126.do