標籤:java 事件監聽機制
看項目代碼時遇到了好多事件監聽機制相關的代碼,現學習一下:
java事件機制包括三個部分:事件、事件監聽器、事件來源。
1.事件:繼承自java.util.EventObject類,開發人員自訂。
package com.shuyan.javatest.EventTest;import java.util.EventObject;public class DnsEvent extends EventObject { private String userData; private long parseTime; public DnsEvent(Object source) { super(source); } public DnsEvent(Object source, String userData, long parseTime) { super(source); this.userData = userData; this.parseTime = parseTime; } public String getUserData() { return userData; } public void setUserData(String userData) { this.userData = userData; } public long getParseTime() { return parseTime; } public void setParseTime(long parseTime) { this.parseTime = parseTime; }}
2.事件監聽器:實現java.util.EventListener介面,註冊在事件來源上,當事件來源的屬性或狀態改變時,取得相應的監聽器調用其內部的回調方法。
package com.shuyan.javatest.EventTest;import java.util.EventListener;public interface DnsEventListener extends EventListener { public void processDnsEvent(DnsEvent dnsEvent);}監聽器的具體實作類別
public class DnsEventaListenerImpl implements DnsEventListener { @Override public void processDnsEvent(DnsEvent dnsEvent) { String userdata = dnsEvent.getUserData(); System.out.println("userdata-->" + userdata); }}
3.事件來源:事件發生的地方,由於事件來源的某項屬性或狀態發生了改變導致某項事件發生。由於事件監聽器要註冊在事件來源上,所以事件來源類中應該要有盛裝監聽器的容器(List,Set等)。
public class ManagerListener { private List<DnsEventListener> listeners = null; private static class Singleton { static ManagerListener managerListener = new ManagerListener(); } public static ManagerListener getInstance() { return Singleton.managerListener; } private ManagerListener() { listeners = new ArrayList<>(); } public void addDnsEventListener(DnsEventListener listener) { this.listeners.add(listener); } public void removeDnsEventListener(DnsEventListener listener) { this.listeners.remove(listener); } public void fireDnsEventListener(DnsEvent event) { for (DnsEventListener listener : listeners) { listener.processDnsEvent(event); } }}測試如下:
public class DnsEventTest { public static void main(String[] args) { ManagerListener managerListener = ManagerListener.getInstance(); DnsEvent dnsEvent = new DnsEvent(managerListener, "data", 1000L); DnsEventaListenerImpl listener = new DnsEventaListenerImpl(); managerListener.addDnsEventListener(listener); managerListener.fireDnsEventListener(dnsEvent); }}
參考:http://blog.csdn.net/longlong3050/article/details/6854456
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Java 中的事件監聽機制