工厂模式应用
前言
代码
工厂类:
@Component
public class XXEventHandlerFactory implements ApplicationContextAware {
private ApplicationContext applicationContext;
Map<Integer, XXEventHandler> handlerMap = new HashMap<>();
@Override
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@PostConstruct
private void afterPropertiesSet() {
applicationContext.getBeansOfType(XXEventHandler.class).values()
.forEach(handler -> handlerMap.put(handler.getEventType(), handler));
}
public XXEventHandler getHandler(Integer eventType) {
return handlerMap.get(eventType);
}
}
处理器接口:
public interface XXEventHandler {
// 获取事件类型
Integer getEventType();
// 处理程序 (此处可定义为实体类,也可使用String)
void handle(XXEventEntity eventDTO);
}
实际处理器实现:
@Component
public class AEventHandler implements XXEventHandler {
@Override
public Integer getEventType() {
// 使用枚举类返回唯一标识该处理器的标记
return XXEventEnum.A.getEventType();
}
@Override
public void handle(XXEventEntity eventDTO) {
// xxx 进行事件处理
}
}
使用
// 生产事件
XXEventEntity aEventEntity = new XXEventEntity();
aEventEntity.setEventType(XXEventEnum.A.getEventType());
aEventEntity.setXXX();
// 此处可以将 事件存进数据库/发送至消息队列
// 处理事件
// 1. 从数据库/消息队列获取事件
// 2. 获取aEventEntity eventType
// 3. 获取处理器 xXEventHandlerFactory.getHandler(eventType).handle(aEventEntity);
本文来自博客园,作者:帅气的涛啊,转载请注明原文链接:https://www.cnblogs.com/handsometaoa/p/18458660
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)