个人认为,java里面的事件的监听和处理是做得比较好的。而它结构的完美就不不是用语言来形容的了。在java里,接口的使用可以说是代表着一个人对java的理解和掌握程度。而那些所谓模式几乎全部是接口的使用,我在看模式的时候,常常花时间最多的地方就是接口的应用。接口使得安全的增强一个类的功能成为可能,并且提供了一个抽象的骨架实现。但是并非所有的接口里面都有骨架的,有的就是一个接口,剩下的就是注释了,这样的接口有什么用呢?如果你对java比较熟悉的话,相信你已经结识到了一些空的接口,比如Cloneable这个接口,它的作用无非就是表示了要复制的对象。没有这个接口你的程序注定要throw Exception。今天在看java事件驱动的时候,又结识到了一个空的接口类型EventListener。现在突然有个想法,是不是最基本的java类型都是空的接口来实现的呢?有空了在看程序把。
java里面的事件驱动的格式一般都是add***Listener(),remove***Listener()。我在写代码的时候也不是很关心这些事件的产生到底是怎么产生的。现在想想,每个事件必定要有个事件源,也就是EventSource,它的作用就是产生***ChangeEvent,这里的EventListener必定是每个事件事件都要实现的了,说是实现只是implements或者是extends一下就可以了,这些都不用我们来担心了,sun早就做好了这些的代码,我们可以查看,这里要说的是如果自己写一个大点的系统的话,难免是要来重新写事件驱动的代码,但是参考sun的这一套我们可以很方便的实现自己的事件发布,监听,处理等的操作。Event可以用sun提供的,事件的发布可能要我们来重新改写,但是如果仔细的阅读sun的代码,我们可以很容易的找到事件源的代码PropertyChangeEvent。, here's an overview of how event handling in the AWT works.
A listener object is an instance of a class that implements a special interface called (naturally enough) a listener interface.
- The event source sends out event objects to all registered listeners when that event occurs.
- The listener objects will then use the information in the event object to determine their reaction to the event.
想我刚接触java的时候看到事件就是头晕,现在看来也不是很恐怖,它里面的最根本的一个就是PropertyChangeEvent(Object source, String propertyName, Object oldValue, Object newValue)这个构造函数。他的作用就是用来发布一个事件的属性发生了变化这样一个事件(PropertyChangeEvent),变化发出去就要靠另外一个class:PropertyChangeSupport。它里面充满了各种对事件进行处理的方法,仔细看看绝对对自己对java的理解有很大的帮助。它发布事件变化的方式很简单,就是firePropertyChange,有人称这种方式是广播的方式,还是很有道理的,你愿意关心我发布的信息,你就加一个Listener过来,它发布的是一个PropertyChangeEvent,在以后的监听事件中我们可以想到每个监听的肯定是一个PropertyChangeEvent或者它的一个字类的事件。我们所要作的就是按照Observer模式所说的做一个忠实的客户端,我们可以加一个监听事件来监听事件发生了变化,这里是sun我所发现的用Observer模式用的最彻底的地方(也许我的理解有误)。一个组件要想能够监听到事件的变化,就要设置add***Listener()这个方法。千万不要以为在java里面的所有的组件都是这样来实现的,java用了一个很恐怖的类把java里面所有的监听的接口都在这AWTEventMulticaster里面实现了,它提供了一些static的add,delete方法来为其他需要用到监听的组件来调用。这大概就是整个事件的流程,事件产生,发布,监听。头绪有点乱,还是对事件的机制不是很熟,以后成熟了再来修改。