用Notifier类实现Event/Listener更容易

ZDNet软件频道 时间:2003-04-10 作者:翻译:Java研究组织-foosleeper |  我要评论()
本文关键词:javatips
Event/Listener模式在Java中很常见,并且很有用,但要自己来实现这个模式是一件很费时间并且单调乏味的工作。
本文译自Builder.comEvent/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类,你就能执行这样一个常见的任务而不必每次都为之编写代码。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134