event
我从 C# 世界来到 Java,其中观察者模式被实现为带有关键字的一流语言结构。
我看到 JavaObservable
从早期就有这个类,但它显然存在实现问题并且似乎没有被广泛使用。到目前为止,我只是在我的 Java 代码中滚动我自己的观察者模式实现,但我总是忍不住认为必须有一个更好的替代方案来总是输出这个样板代码。Swing 中有 Listener 类,但它们似乎不适用于非 Swing 代码。
对于这个非常常见的问题,推荐的解决方案是什么?第三方库对我来说没问题。
event
我从 C# 世界来到 Java,其中观察者模式被实现为带有关键字的一流语言结构。
我看到 JavaObservable
从早期就有这个类,但它显然存在实现问题并且似乎没有被广泛使用。到目前为止,我只是在我的 Java 代码中滚动我自己的观察者模式实现,但我总是忍不住认为必须有一个更好的替代方案来总是输出这个样板代码。Swing 中有 Listener 类,但它们似乎不适用于非 Swing 代码。
对于这个非常常见的问题,推荐的解决方案是什么?第三方库对我来说没问题。
通常,观察者模式在需要时使用临时解决方案来实现。当涉及到行为模式时,它是最简单的模式之一:控制“观察者”列表的两种方法,以及一种在发生有趣事情时通知观察者的方法。
观察者模式往往很少出现在某些领域之外,而且当它确实出现时,它往往过于特定于应用程序领域,因此通用解决方案没有什么价值。您可以看到java.util.Observable
该类的问题:如果您继承自Observable
您必须接受可能传递给您的所有可能类型的“观察者”,这可能对您的应用程序没有意义:
也就是说,来自 Google Guava 的 EventBus似乎在简化事件生成和处理方面做得很好,它采用了一种完全不同的方法。
之前在 SO 上已经讨论过其他基于注释的技术。
我建议研究反应式编程。Java 只有一种我知道的实现:reactive4java。
本文展示了使用 Spring Framework 的模式的一个很好的实现。你仍然需要定义你的 Subject 和 Observer 接口(和实现),但是 Spring 通过 XML 配置处理 Observer 向 Subjects 的注册。