我正在尝试开发一个基于处理某些事件和生成数据的系统。每个事件将包含(可能)几个不同的字段,每个侦听器将处理一些或它们。我有以下两种方法
在事件生成类中,我将注册多个事件侦听器,每个侦听器侦听事件特定字段的一个特定值,例如:
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中不是这种情况。因为我们将简单地生成另一组侦听器并注册他们与事件生成类。
你们怎么看这些?它们有意义吗,还是您宁愿建议完全不同的东西?