Class AbstractEventDispatcher

  • All Implemented Interfaces:
    EventDispatcher, Listenable<EventListener<?>>
    Direct Known Subclasses:
    DirectEventDispatcher, ParallelEventDispatcher

    public abstract class AbstractEventDispatcher
    extends java.lang.Object
    implements EventDispatcher
    Abstract implementation of EventDispatcher that provides common functionality for dispatching events to registered listeners.

    This class manages the registration and removal of event listeners, maintains a cache of listeners organized by event type, and supports dispatching events using a specified execution strategy (e.g., sequential or parallel). It also supports sorting of listeners based on their priority via the Prioritized interface.

    Key Features

    • Listener Registration: Supports adding and removing event listeners with type safety.
    • Event Dispatching: Dispatches events to all relevant listeners using an execution strategy defined by an Executor.
    • Listener Priority: Listeners are sorted by priority before being notified of an event. Higher priority listeners (lower integer value) are executed first.
    • Caching: Maintains a thread-safe mapping from event types to listeners for efficient dispatching.
    • Service Loading: Optionally loads listeners via Java's SPI mechanism (ServiceLoader).

    Example Usage

    
     public class MyEvent extends Event {}
    
     public interface MyEventListener extends EventListener<MyEvent> {
         void onEvent(MyEvent event);
     }
    
     // Create a dispatcher with direct (sequential) execution
     AbstractEventDispatcher dispatcher = new DirectEventDispatcher();
    
     // Register a listener
     dispatcher.addEventListener((MyEventListener) event -> System.out.println("Event received!"));
    
     // Dispatch an event
     dispatcher.dispatch(new MyEvent());
     

    Extending This Class

    Subclasses must provide a concrete implementation of the getExecutor() method that defines how events should be dispatched.

    Since:
    1.0.0
    Author:
    Mercy
    See Also:
    EventDispatcher, EventListener, Event, Listenable, Prioritized, ServiceLoader