程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用Notifier類實現Event/Listener更容易

用Notifier類實現Event/Listener更容易

編輯:關於JAVA

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類,你就能執行這樣一個常見的任務而不必每次都為之編寫代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved