Events(事件):描述发生了什么的对象
Event Source (事件源):事件的产生器
Event Handlers(事件处理器):接收事件对象,解释事件对象并处理用户交互的方法
JDK1.0 采用了层次型的事件模型。当事件产生时,它先被送往产生该事件的组件 (component), 如事件在这里未被处理,它就会被自动送往该组件的Container, 如Container也未对事件进行处理,则还会递交给该Container的上一层Container(如有的话)。
层次型模型的优点:
简单,对中小规模的应用比较合适。
层次型模型的缺点:
1. 事件仅能被产生该事件的组件或它的Container所处理,但实际编程中要对事件作出处理的类往往并不符合这个条件。
2. 大量的CPU周期浪费在一些无关事件的处理上。因为按照这种模型,一些无关或不重要的事件也会被一层一层地传上去。
3. 为了处理事件,程序员必须继承事件源组件对应的类或在它的Container中写一个很大的handleEvent()方法。
在JDK1.1中,对事件的接受和处理方式作了很大的变动,其对应的事件模型又称为委托代理模型(Delegation model)。该模型的原理如下:
当事件产生时,该事件被送到产生该事件的组件去处理,而要能够处理这个事件,该组件必须登记(register)有与该事件有关的一个或多个被称为listeners的类,这些类包含了相应的方法能接受事件并对事件进行处理。在这种模式中,事件的产生者和事件的处理者分离开来了,它们可以是不同的对象。事件的处理者,即那些listeners,是一些实施了Listener接口的类。当事件传到登记的listener时,该listener中必须有相应的方法来接受这种类型的事件并对它进行处理。
委托代理模型的优缺点:
优点:该模型较好地解决了层次模型中的问题,并提供了对Java Bean的支持。
缺点:虽然JDK的新版本也支持旧的层次模型,但层次模型和委托代理模型不能在程序中混用