Java的Observable类的替代品?[已关闭]

2022-09-02 09:54:15

我是从 C# 世界来到 Java 的,在 C# 世界中,Observer 模式是使用关键字实现为一流的语言构造。event

我看到Java从早期就开始上课,但它显然存在实现问题,似乎没有被广泛使用。到目前为止,我只是在我的Java代码中滚动我自己的Observer模式实现,但我总是忍不住认为必须有更好的替代方案来总是提供这个样板代码。Swing 中有 Listener 类,但它们似乎不适合非 Swing 代码。Observable

对于这个非常普遍的问题,推荐的解决方案是什么?第三方库对我没关系。


答案 1

通常,观察者模式在需要时使用临时解决方案实现。当涉及到行为模式时,它是最简单的方法之一:两种方法来控制“观察者”列表,以及一种在发生有趣的事情时通知观察者的方法。

观察者模式往往在某些领域之外出现得太少,当它出现时,它往往对应用程序领域过于具体,因此通用解决方案几乎没有价值。你可以看到这个类的问题:如果你从中继承,你必须接受可能传递给你的每一种可能的“观察者”,这可能对你的应用程序没有意义:java.util.ObservableObservable

  • 如果您的对象可以生成两种不同类型的事件,因此需要两个不同的观察者列表,该怎么办?
  • 如果观察者可能会根据事件影响您的对象,例如能够通过否决更改,该怎么办?

也就是说,Google Guava的EventBus似乎通过采用完全不同的方法来简化事件生成和处理方面做得很好。

基于注释的其他技术之前已在 SO 上讨论过


答案 2

我建议研究反应式编程。Java只有一个我所知道的实现:reactive4java