| |
event/listener模式在java中很常见,并且很有用,但要自己来实现这个模式是一件很费时间并且单调乏味的工作。每次你都不得不和list或vector打交道,每次你都不得不处理add方法、remove方法,然后你还得遍历整个列表来通知所有的监听者,这才算完。
如果能象下面这样简单就好了:
notifier notifier = new notifier("actionperformed"); ... notifier.addlistener( someobject ); ... notifier.notify( new actionevent(this) ); 只要几行代码就能够完成一切。
下面的notifier类就达到了这个目的:
package com.generationjava.lang;
import java.util.*; import java.lang.reflect.*;
public class notifier {
private arraylist listeners = new arraylist(); private string listenermethod;
public notifier(string name) { this.listenermethod = name; }
public void addlistener(object not) { this.listeners.add(not); } public void removelistener(object not) { this.listeners.remove(not); }
public void notify(eventobject event) { iterator itr = listeners.iterator(); while(itr.hasnext()) { try { object listener = itr.next(); class clss = listener.getclass(); method method = clss.getmethod( this.listenermethod, new class[] { event.getclass() } ); method.invoke( listener, new object[] { event } ); } catch(exception e) { e.printstacktrace(); } } } }
这个类并没有经过性能上的优化,而且它是不同步的,但在编写一组event/listener api的时候,可以很快掌握它并且节省时间。利用notifier类,你就能执行这样一个常见的任务而不必每次都为之编写代码。
摘自:zdnet 时间:2003年9月10日
|
|