假设您已经编写了一个API,可以在独立线程中实时收集数据。数据访问是线程安全的,并通过接口。例如。 getData()
,它不会阻止并提供最新信息。该API用于许多应用程序;一些GUI驱动,其他控制台程序。
您有什么选择通知您的应用程序有数据更新?我们绝对不希望API依赖于应用程序,因此我们不希望fireTableDataChanged()
或类似API中的任何内容。 (在我们的GUI应用程序中,我们会在API通知我们或我们查看API之后调用fireTableDataChanged()
等。)
非常感谢!
答案 0 :(得分:3)
一种选择是编写自己的事件生成器类。
IEventListener由观察者实现。它有一种接收事件的方法。
IEventProducer由任何observable实现,通过EventProducer实现。它有添加和删除监听器的方法。
EventProducer是线程安全的。它有一个方法将事件发送到侦听器的CopyOnWriteArrayList。它捕获并记录侦听器抛出的任何异常。它还提供了添加和删除侦听器的方法。
然后,任何可观察的类都可以通过内部EventProducer实现IEventProducer。
如果尝试在同一个类上支持两种侦听器类型,则键入erasure将要求您为不同的侦听器命名不同的添加/删除侦听器方法。
答案 1 :(得分:2)
您可以查看Observable和Observer。我没有亲自使用它们,看着API,我并不完全相信我关心它。基本上,您的可观察数据对象被强制从Observable
类扩展。对数据感兴趣的类必须实现Observer
接口并向数据对象注册。这个API自1.0以来就存在,不是通用的,我认为它很笨重。但是,这是我所知道的Java库中唯一的Observer / Observable模式。
答案 2 :(得分:2)
你基本上有两个选择。
1)轮询API以查看它是否有新数据 2)获取API以在有新数据时通知您。
获取API以通知您可能会使用Observer模式。请注意,您不必使用Observable
和Observer
,您可以编写自己的接口。基本上它的工作原理如下;