JAVA的事件通知機制

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()
相關文章
相關標籤/搜索