难道还有比,如果对处理事件的顺序更好的办法?
-
23-09-2019 - |
题
我最近跑过实现为处理事件使用此图案的硬编码的映射的几个对象:
public void handleEvent(Event event)
{
if(event.getCode() == SOME_STATIC_EVENT)
doSomething(event);
if(event.getCode() == ANOTHER_STATIC_EVENT)
doSomethingElse(event);
}
其中doSomething的功能被实现为同一类的方法。
在追求更松散的耦合的希望,你会如何建议抽象出这种模式?此外,什么是映射的最佳方法0..N功能到击发事件?
解决方案
是的,基本上你想要做的就是创建一个映射事件类型的接口的数据结构。下面是作为地图实现一个简单的。
EventHandlerInterface h;
// eventMap contains a mapping of event codes to
// implementations of EventHandlerInterface
h = eventMap.get(event.getCode());
if(h != null)
{
h.handle(event);
}
此使您有效地处理大量的事件,动态地添加,删除,以及不同的处理程序重新映射事件的能力。
其他提示
有最近被认为是相似,相近够SOF后,我的回应的此处可以回答你的问题非常好。
而不是一个可运行的,你会作出自己的界面:
public abstract interface EventHandler
{
public void run(Event event);
}
您可以通过将代码干净了一点开始。使用本地变量取出重复event.getCode()
。切换到枚举,所以你可以使用switch
。
如果有重复图案可以解码成多方法回调接口,像AWT一样。
我建议偶数的注册变得更为具体。注册为每个事件类型不同的回调。甚至远服用事件代码出了大事,也许,移除事件。根据该表可能会保持事件代码映射到处理程序,但这应该是不透明的。这样做的缺点的方法是,匿名内部类的当前(JDK6)高度冗长和类处理是低效的(加载时间和烫发根足迹)。
不隶属于 StackOverflow