Class EventDispatcher<E,L extends Listener<E>>
- Type Parameters:
E- Typ der Event-Objekte.L- Typ der verwendeten Listener-Schnittstelle.
Der EventDispatcher verwaltet eine Liste von angemeldeten Listenern
in einem CopyOnWriteArraySet, dass besonders für Situationen geeignet
ist, in denen in der Regel wenige Objekte verwaltet werden müssen, auf die
schnell zugegriffen werden soll und die sich selten ändern. Das trifft in den
meisten Fällen auf die Listener eines Objekts zu.
Um einen EventDispatcher zu nutzen, muss eine Schnittstelle als
Unterinterface von Listener erstellt werden, die Methoden für die
einzelnen Events definiert. In der Regel wird eine Methode pro Event
angelegt, aber dies ist nicht unbedingt notwendig.
Ein Objekt, dass Events für diese Art von Listener erzeugt, erstellt einen
EventDispatcher und
registriert die notwendigen
Events.
EventDispatcher<MyEvent, MyEventListener> dispatcher = new EventDispatcher<>();
dispatcher.registerEventType("start", (evt, listener) -> listener.started(evt));
dispatcher.registerEventType("stop", (evt, listener) -> listener.stopped(evt));
Hier werden zwei Events registriert "start" und "stop". Die Bezeichnung der
Events wird nut intern verwendet. Jedes Event registriert eine Funktion, die
den Aufruf der Listener-Schnittstelle umsetzt. In der Regel ist dies ein
Lambda-Ausdruck von zwei Parametern: dem Event-Objekt vom Typ E und
der Listener, der aufgerufen werden soll, vom Typ L.
Nun können MyEventListener angemeldet und Events ausgelöst werden.
public void addEventListener( MyEventListener listener ) {
dispatcher.addListener(listener);
}
public void removeEventListener( MyEventListener listener ) {
dispatcher.removeListener(listener);
}
public void methodThatCreatesEvents() {
dispatcher.dispatchEvent("start", new MyEvent());
// Do something
dispatcher.dispatchEvent("stop", new MyEvent());
}
Siehe AudioListener und
Music für ein Beispiel der Verwendung.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddListener(L listener) voiddispatchEvent(String eventKey, E event) booleaneventRegistered(String eventKey) booleanvoidregisterEventType(String eventKey, BiConsumer<E, L> dispatcher) voidremoveListener(L listener)
-
Constructor Details
-
EventDispatcher
public EventDispatcher()
-
-
Method Details
-
registerEventType
-
addListener
-
removeListener
-
hasListeners
public boolean hasListeners() -
eventRegistered
-
dispatchEvent
-