【发布时间】:2012-11-03 12:05:35
【问题描述】:
我正在尝试开发一个基于处理某些事件和生成数据的系统。每个事件将包含(可能)几个不同的字段,每个侦听器将处理一些或它们。我想到了以下两种方法
-
在事件生成类中,我将注册多个事件监听器,每个监听事件特定字段的一个特定值,例如:
public class MicroListener implements Listener { public void processEvent(Event e){ if(e.getName().equals(registeredName)) { ... } }
这很诱人,因为处理是在对象本身内部完成的,并且没有集中处理事件,而是允许每个对象处理信息。缺点,可能是致命的,是每个事件(几十万个)都必须广播给所有听众,而实际上只有一小部分会做某事。从长远来看,它可能会产生巨大的性能冲击......
-
一个集中式侦听器,它将侦听所有事件并对其采取行动,并将处理委托给相应的事件处理器,例如:
public class CentralListener implements Listener { Map<String, Processor> processorsByName; public void processEvent(Event e){ processorsByName.get(e.getName()).process(e); } }
这会更快,但它需要单独的映射或处理器集合用于事件的任何其他部分,例如检查事件 ID 等的处理器。方法 1 中不是这种情况。因为我们将简单地生成另一组侦听器并将它们注册到事件生成类。
你们怎么看这些?它们是否有意义,还是您更愿意为完全不同的事物提供建议?
【问题讨论】:
标签: java events event-driven-design