用Java的一般术语来说,有事件的侦听器和处理程序。
我的意思是我不知不觉地使用它们,无论API中有哪些可用。
我的问题是,在什么情况下我们使用侦听器,在什么情况下我们使用事件的处理程序?
它们之间有什么区别?特性??
我已经搜索了原因,但找不到Java的正确解释。
Answers:
侦听器和处理程序之间没有正式定义的区别。有人可能会争辩说它们是可互换的。但是对我来说,它们的含义略有不同。
侦听器是一个对象,用于订阅源中的事件。cf. 在观察者模式。通常,您可以为每种类型的事件指定许多侦听器,并且它们是通过方法添加的addXyzListener
。
例如:将MouseListener
在Java的API中。
处理程序是负责处理某些事件的对象。典型的方案是为特定事件/任务提供处理程序,以作为构造函数的参数,或者通过方法设置处理程序setXyzHandler
。换句话说,对于每种类型的事件,通常都有一个处理程序。
例如:将MemoryHandler
在Java的API中。
最基本的区别是联想
一般而言,只有一个中央处理程序管理器来管理所有事件,而对于侦听器而言,每个要侦听的实体都必须管理自己的侦听器集合
我认为差异是细微的,因为具体的侦听器也是事件处理程序,或者至少具有可以视为事件处理程序的方法。也就是说,一个具体的侦听器在接收到一个事件对象(来自事件源)后,将处理或管理对该事件的反应,该事件对象包含有关刚刚发生的事件的所有有用信息(在事件源上)。由于此侦听器必须实现xxxListener接口,该接口强制他实施至少一种方法,该方法在事件发生时由事件源对象依次执行,因此可以将侦听器本身视为处理程序,更确切地说,可以将其视为方法。可以将由Listener对象实现的Listener接口视为真正的事件处理程序。因此,我将事件处理程序视为只是响应事件而执行的代码。这与侦听器对象不同,侦听器对象是更抽象的概念(例如观察者设计模式)的元素。这是我对此主题的个人看法。
我一直在试图弄清所有信息,但我迷路了。我看过Delphi(Pascal),C,C ++,java ...还不清楚。所以,一个月后,这就是我所看到的问题。我可能完全偏离了轨道,所以请有礼貌地告诉我。
一个事件发送者,一个捕获器,只要发件人注册了该捕获器。我有4个对话框,每次文件(其处理代码不在4个对话框中的另一个模块中)更改时都需要更新。我考虑过用老式的方式进行更新,但是后来我研究了Delphi事件和消息处理。让我们来看看:
文件F(发送方)已完成阅读,应将现在有数据显示给用户和他们玩的事实通知对话框1..4。什么是最好的?
尝试将对话框1..4注册为侦听器,并让发送方以某种方式触发OnUpdatedDataEvent吗?
尝试在系统上发送消息,希望Dialogs 1..4能够捕获到它?
请注意,该事件使事物保持耦合,而消息传递却没有……并且调试起来很痛苦。
我不知道File的代码块将如何注册4个侦听器(对话框)?
我正在研究级联调用的可能性,这意味着调用方调用一个监听器,然后调用下一个监听器,直到到达链的末尾。我什至不知道那是否有可能。
一个例子:
说文件F是语言列表。现在,DialogBox 1对列表做了一些操作(例如,添加了一种新语言);组合框更新F文件;这又触发了DataUpdatedEvent。4个对话框包含例如TComboBox,当它们弹出时会显示语言列表。我希望这4个框注意到更改,并使用新近更新的File更新它们自己的组合框内容...而不必担心组合框如何知道它们需要刷新其内容。如果按预期工作,则将保留Sender参数,并且将跳过触发dataUpdateEvent的对话框,因为该对话框已经被更新。毕竟,如果一个sender = self然后继续到下一个事件处理程序应该很容易实现。
所有这些都是因为我想锻炼自己的大脑...以预防老年痴呆症,我可能补充得不是很成功。
这是语义。