我想开发一个基于处理某些事件并生成数据的系统。每个事件将包含(可能)几个不同的字段,每个侦听器将处理一些或他们。我心目中Java - 事件处理设计
以下两种方法在事件代班,我会注册多个事件监听器,每个监听事件的特定领域的一个特定值,例如:
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中不是这种情况,因为我们只是生成另一组侦听器并将它们注册到事件生成类。
你们对这些有什么看法?他们是有道理的,还是你会建议完全不同的?