我最近跑过实现为处理事件使用此图案的硬编码的映射的几个对象:

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)高度冗长和类处理是低效的(加载时间和烫发根足迹)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top