Java 事件訂閱和發布是一種設計模式,通過該模式,一個消息可以被多個對象同時接收,從而達到解耦的目的。根據該模式,一個事件分為三層:事件源、事件、事件監聽器。
事件源是事件發生的地方,它產生事件并把事件傳遞給事件監聽器。事件是一個封裝了所有事件信息的對象,包括事件源以及相關的數據。事件監聽器是一個接口,該接口定義了處理事件的方法,事件源會在事件發生時調用相應的方法來通知事件監聽器。
Java 中實現事件訂閱和發布模式的方式有多種,最常用的方式是使用觀察者模式或者是使用事件模型。在觀察者模式中,事件源是被觀察者,而事件的監聽器是觀察者。當事件發生時,被觀察者會通知所有觀察者并傳遞事件信息。在事件模型中,事件源封裝了事件相關的信息,在事件源中提供了添加和刪除事件監聽器的方法,當事件發生時,事件源會遍歷所有的事件監聽器并調用相應的方法。
public class EventSource {
private List<EventListener> listeners = new ArrayList<>();
public void addEventListener(EventListener listener) {
listeners.add(listener);
}
public void removeEventListener(EventListener listener) {
listeners.remove(listener);
}
public void fireEvent(Event event) {
for (EventListener listener : listeners) {
listener.handleEvent(event);
}
}
}
public interface EventListener {
void handleEvent(Event event);
}
public class Event {
private Object source;
private String type;
private Object data;
public Event(Object source, String type, Object data) {
this.source = source;
this.type = type;
this.data = data;
}
public Object getSource() {
return source;
}
public String getType() {
return type;
}
public Object getData() {
return data;
}
}
public class EventHandler implements EventListener {
@Override
public void handleEvent(Event event) {
// 處理事件
}
}
以上代碼是一個簡單的事件訂閱和發布模型的實現,主要包括三個類:EventSource、EventListener 和 Event。EventSource 是事件源,它包含了添加和刪除事件監聽器以及觸發事件的方法。EventListener 是事件監聽器,它定義了事件處理的方法。Event 是事件對象,它封裝了事件相關的信息。