Java 中的事件監聽機制
阿新 • • 發佈:2017-06-17
add import userdata 開發人員 util ner dns pre sta
測試例如以下:
看項目代碼時遇到了好多事件監聽機制相關的代碼。現學習一下:
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 中的事件監聽機制