package org.dayatang.dddlib.event.bus; import org.dayatang.dddlib.event.api.Event; import org.dayatang.dddlib.event.api.EventBus; import org.dayatang.dddlib.event.api.EventListener; import org.dayatang.dddlib.event.api.EventStore; import org.dayatang.utils.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * 简单的进程内事件总线 * @author yyang */ public final class SimpleEventBus implements EventBus { private static final Logger LOGGER = LoggerFactory.getLogger(SimpleEventBus.class); private EventStore eventStore; private List<EventListener> listeners = new ArrayList<EventListener>(); public SimpleEventBus(EventStore eventStore) { this.eventStore = eventStore; } public SimpleEventBus(EventStore eventStore, List<EventListener> listeners) { Assert.notNull(eventStore, "Event Store is null."); this.eventStore = eventStore; Assert.notEmpty(listeners, "listeners must not be null or empty."); this.listeners = Collections.unmodifiableList(listeners); } List<EventListener> getListeners() { return listeners; } @Override public void register(EventListener... listeners) { this.listeners.addAll(Arrays.asList(listeners)); } @Override public void unregister(EventListener... listeners) { this.listeners.removeAll(Arrays.asList(listeners)); } @Override public void post(Event event) { LOGGER.info("Post a event " + event + " to event bus"); eventStore.store(event); for (EventListener listener : listeners) { listener.onEvent(event); } } }