1.java的事件通知機制通常有3種角色:
- EventObject事件對象,通常繼承java.util.EventObject,可自定義,通常狀況下會做爲參數存到監聽器jianlistener的方法中
- Event Source事件源,也可稱爲事件管理器,用來管理通知觸發事件,觸發事件的源頭,不一樣的事件源會觸發不一樣的事件類型.
- Event Listener事件監聽器:負責監聽事件源發出的事件,一般會實現java.util.EventListener,可爲匿名類實現,也可爲普通類實現
2 經過代碼實現一個簡單的事件監聽
1.事件
public class Event extends EventObject { //事件,
private String str = "";
public Event(Object source, String str) {
super(source);
this.str = str;
}
@Override
public String toString() {
return "Event{" +
"str='" + str + '\'' +
'}';
}
}
2.監聽接口
interface EventListener { //監聽接口,包含對事件的處理程序
void onChange(Event t);
}
3.監聽接口的實現,即監聽器
class EventListener1 implements EventListener{ //監聽接口的實現
@Override
public void onChange(Event t) {
System.out.println("我是實現類!");
}
}
4.時間管理器,事件源,
class EventManager {
private HashSet<EventListener> listener = new HashSet<>(); //存儲監聽對象
//添加事件
public void addListener(EventListener e) {
if (listener == null) {
return;
}
listener.add(e);
}
public void postEvent(Event event) { //觸發事件的方法
if (listener == null) {
return;
}
notifyListeners(event);
}
public void notifyListeners(Event event) { //通知各自的監聽方法去實現
for (EventListener eventListener : listener) {
eventListener.onChange(event);
}
}
}
5.測試事件監聽機制整個過程
public static void main(String[] args) {
EventManager eventManager = new EventManager();
eventManager.addListener(new EventListener() { //監聽接口的匿名類實現
@Override
public void onChange(Event t) {
System.out.println("我是匿名類!"+t);
}
});
eventManager.addListener(new EventListener1()); //監聽的EventListener1()實現類
eventManager.postEvent(new Event("89"));
}
運行結果:
我是實現類!
我是匿名類!Event{str='89'}
Process finished with exit code 0
----------------------------
經過事件管理器將已經實現監聽接口的監聽器new EventListener()對象和new EventListener1()對象放到時間管理中;
而後事件管理器去觸發監聽,而後就會實現監聽器所要實現的方法onChange()