事件驱动架构模式
public class EventDriven {
@Test
public void all() {
final EventDispatcher eventDispatcher = EventDispatcherImpl.builder().build();
eventDispatcher.register(UserCreateEvent.class, new UserCreateHandler());
eventDispatcher.dispacher(UserCreateEvent.of(User.of(Long.valueOf(1), "zxd")));
}
}
interface Event {
Class<? extends Event> type();
}
abstract class BaseEvent implements Event {
@Override
public Class<? extends Event> type() {
return getClass();
}
}
interface EventHandler<T extends Event> {
void handle(T event);
}
interface EventDispatcher {
<E extends Event> void register(Class<? extends Event> type, EventHandler<E> hanlder);
<E extends Event> void dispacher(E event);
}
@Slf4j
@Builder
class EventDispatcherImpl implements EventDispatcher {
@Default
private final ConcurrentMap<Class<? extends Event>, EventHandler<? extends Event>> HANDLERS = new ConcurrentHashMap<>();
@Override
public <E extends Event> void register(Class<? extends Event> type, EventHandler<E> hanlder) {
HANDLERS.putIfAbsent(type, hanlder);
}
@Override
public <E extends Event> void dispacher(E event) {
final EventHandler<E> handler = (EventHandler<E>) HANDLERS.get(event.getClass());
if (handler != null) {
handler.handle(event);
} else {
log.error("no handler for event {}", event);
}
}
}
@Value(staticConstructor = "of")
class User {
private Long id;
private String name;
}
@Value(staticConstructor = "of")
class UserCreateEvent extends BaseEvent {
private User user;
}
@Slf4j
class UserCreateHandler implements EventHandler<UserCreateEvent> {
@Override
public void handle(UserCreateEvent event) {
log.info("id:{} name:{}", event.getUser().getId(), event.getUser().getName());
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步