java - JAVA中通知是如何承载的?

标签 java events notifications

我正在阅读有关事件样式架构的内容,并发现了这个

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/

相关文章:

c# - 通过 C# 修改对象访问属性

java - 如何使用 key 监听器来验证对文本字段的输入

java - 我的 Pivotal tc 服务器未启动

java - Cassandra JMX java.rmi.server.ExportException : Port already in use: 7199

javascript - 仅触发 jQuery 中最内层元素的点击事件

IOS 7判断 "Show in Notification Center"是否被禁用

android - Glide : load image to push notifications

javascript - 使用小书签中的通知 API

java - 具有空列的结果集中的 Java Bean 是否会显着影响内存/大小?

Java 错误 - 类型 List<E> 不可见 - 类型 Map<K,V> 不可见