我正在阅读有关事件样式架构的内容,并发现了这个
There are different ways to deliver notifications, but the most common technique uses an indirect method call that is made through a pointer initialized at runtime.
但是当 Java 没有指针时,它如何传递通知呢?
最佳答案
Java的事件系统基于Observer模式,除了在 Java Swing 中,一切都被称为“监听器”而不是“观察者”,并且通常实现 EventListener
(正如您可以从该链接顶部的野兽中看出的那样)。
例如,诸如JButton
之类的组件允许您向其添加监听器,以关心按钮何时发生某些情况。如果您的听众关心按钮点击,您可以添加 ActionListener
到按钮,然后 JButton
将其添加到稍后使用的内部列表(具体来说,它使用 EventListenerList
)。当用户单击按钮时,JButton
类将向所有 ActionListener
“触发”一个事件已向其注册的实现。
这基本上是观察者模式,因为您有一个正在被观察的主题( JButton
)和一个想要收到有关主题的更改或事件的通知的观察者( ActionListener
)。
Java 本身没有指针,但这并不意味着这无法实现。在 C++ 中,您将向主题传递一个函数指针,而主题将仅调用该函数。由于 Java 没有函数指针,因此您将实现特定接口(interface)的对象传递给主体,主体将调用该接口(interface)上的确切方法。在上面的示例中,这将是 ActionListener.actionPerformed(ActionEvent)
方法。
请注意,由于缺乏函数指针等机制以及 Java 接口(interface)的流行,这种方法在除 Swing 之外的其他 Java 库中也很流行。
关于java - JAVA中通知是如何承载的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269540/