JAVA中的事件機制的參與者有3種角色:Event、EventSource、Listener
1.Event:就是事件產生時具體的“事件”,用於Listener的相應的方法之中,作爲參數一般存在於Listener的方法之中。
2.EventSource:事件源,它的作用主要是對事件和監聽進行統一管理,具體的接受事件的實體,比如說,你點擊一個button,那麼button就是EventSource,這樣你必須使button對某些事件進行響應,你就需要註冊特定的listener,比如說MouseEvent之中的 MouseClicked方法,這時它就必須有了add方法。
3.Listener:具體的進行監聽的事件類,當有其對應的Event產生的時候,它就調用相應的方法進行處理。在windows程序設計裏邊這種響應使用callback機制來實現的。
首先,定義事件,使其繼承java.util.EventObject類。
import java.util.EventObject;
public class ServerUpdateEvent extends EventObject {
private static final long serialVersionUID = 1L;
private Object obj;
public ServerUpdateEvent(Object source) {
super(source);
}
public Object getObj() {
return obj;
}
}
其次,定義事件監聽管理類,實現對監聽的添加,刪除和啓動
import java.util.ArrayList;
import java.util.List;
/**
* 事件源
* <p/>
* Date 2018年9月6日 下午4:24:06
* <p/>
*
*/
public class ServerUpdateEventSource {
private static List<ServerUpdateListenerInterface> listeners = new ArrayList<ServerUpdateListenerInterface>();
public ServerUpdateEventSource() {
}
// 添加一個監聽
public void addServerUpdateEventListener(ServerUpdateListenerInterface e) {
listeners.add(e);
}
// 刪除一個監聽
public void deleteServerUpdateEventListener(ServerUpdateListenerInterface e) {
listeners.remove(e);
}
// 激活監聽事件
public void fireServerUpdateEvent(ServerUpdateEvent event) {
for (ServerUpdateListenerInterface listener : listeners) {
listener.handleEvent(event);
}
}
}
第三,定義事件監聽接口和實現 java.util.EventListener
a.接口
import java.util.EventListener;
public interface ServerUpdateListenerInterface extends EventListener {
void handleEvent(ServerUpdateEvent serverUpdateEvent);
}
b.實現
public class ServerUpdateListener implements ServerUpdateListenerInterface {
// 自定義事件被觸發時,根據事件執行以下操作
protected void doReloadExecutors(ServerUpdateEvent e) {
System.out.println(e);
}
@Override
public void handleEvent(ServerUpdateEvent serverUpdateEvent) {
doReloadExecutors(serverUpdateEvent);
}
}
最後上測試
public class ServerListenerTest {
public static void main(String[] args) {
//定義事件源管理實踐
ServerUpdateEventSource eventSource = new ServerUpdateEventSource();
ServerUpdateListener listener = new ServerUpdateListener();
// 註冊監聽,往事件源添加監聽
eventSource.addServerUpdateEventListener(listener);
// 模擬事件觸發
ServerUpdateEvent event = new ServerUpdateEvent("HelloWorld");
// 用事件源激活事件,最終執行的是監聽實現類裏的@Override方法
eventSource.fireServerUpdateEvent(event);
}
}
執行結果
ServerUpdateEvent[source=HelloWorld]
好了一個簡單的java自定義事件和監聽的例子就實現完畢。