Java Event机制和观察者模式

新Java 的事件机制是建立在观察者模式基础之上的。在Java 的事件机制的参与者有3种角色:

1、  event object:事件产生时具体的执行事件,一般作为参数,存在listener的方法之中。每个事件都有事件对象与之对应,Java 的事件模式约定每个事件从java.util.EventObject继承。从编程的角度来说是不必须的。

2、  event source:具体的接收事件的实体。比如点击一个button,那么button就是event source,这样必须使button对某些事件进行响应,需要注册特定的listener。一个类要成为事件源不需要不需要派生自任何的类或接口,但事件源需要保持一个事件监听器列表。调用addXXXlistener添加监听器,调用removeXXXlistener删除监听器。这和观察者模式的被观察者Observable基本是统一的。

3、  event listener:具体的对监听的事件类,当有其对应的的event object产生的时候,就调用相应的进行处理。Window程序设计使用callback机制来实现。事件监听器对象是当事件发生时被调用的对象。Java 的事件监听实现了java.util.EventListener接口,这也不是必须的。事件监听和事件对象共同组成了观察者模式的Observer。

 

接下来用例子分别对事件机制和观察者模式做模拟:

1、观察者类DemoObserver,很简单,只打印一句话”have observable!”:

2、被观察者,对Java 自身被观察者对象的使用


3、event object对象,简单的demoevent,之用一个say()动作


4、event listener接口,抽象出多个listener的共同行为,多态


具体实现1:


5、event source事件的载体,集成一个被观察者,也可以使用这个DemoSource类作为被观察者:



6、最后一条,也就是测试,代码很简单,只要是实例化我们的event实体,然后对实体添加监听器,并执行notifyDemoEvent方法:



结果很简单


总体来说,都术语解藕的编程方式,实现细节本人认为是一致的。只是在tomcat的源码分析过程中偶遇Java 事件机制,故多走一步,同时复习下观察者模式。