目前在项目中遇到了一些麻烦。我正在实施一个游戏,我希望它能够事件驱动。创建简单的事件驱动体系结构
到目前为止,我有取决于什么类型的事件发生(的PlayerMove,联系方式,攻击等),它有一个重载方法的EventHandler类
我将可以进行游戏驱动程序或类生成的事件。我的问题是,如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余的情况下高效处理事件?
我要设计我自己的简单的处理程序,而不是使用内置的Java一个本
目前在项目中遇到了一些麻烦。我正在实施一个游戏,我希望它能够事件驱动。创建简单的事件驱动体系结构
到目前为止,我有取决于什么类型的事件发生(的PlayerMove,联系方式,攻击等),它有一个重载方法的EventHandler类
我将可以进行游戏驱动程序或类生成的事件。我的问题是,如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余的情况下高效处理事件?
我要设计我自己的简单的处理程序,而不是使用内置的Java一个本
如果你想有一个EventHandler
类重载方法和您的活动类型没有任何的子类,然后这个简单的代码,它使用反射,应该工作:
public class EventHandler {
public void handle (final PlayerMove move) {
//... handle
}
public void handle (final Contact contact) {
//... handle
}
public void handle (final Attack attack) {
//... handle
}
}
public void sendEvent (final EventHandler handler, final Object event) {
final Method method = EventHandler.class.getDeclaredMethod ("handle", new Class[] {event.getClass()});
method.invoke (handler, event);
}
但是,如果你想拥有单独的EventHandler
S代表不同的事件,下面的效果会更好。
public interface EventHandler<T extends Event> {
void handle (T event);
}
public class PlayerMoveEventHandler implements EventHandler<PlayerMove> {
@Override
public void handle (final PlayerMove event) {
//... handle
}
}
public class EventRouter {
private final Map<Class, EventHandler> eventHandlerMap = new HashMap<Class, EventHandler>();
public void sendEvent (final Event event) {
eventHandlerMap.get (event.getClass()).handle (event);
}
public void registerHandler (final Class eventClass, final EventHandler handler) {
eventHandlerMap.put (eventClass, handler);
}
}
您的应用程序是多线程的,还是您希望使用相同的线程来生成/处理事件? – ShyJ
好吧,与AWT所做的一样:它使用事件处理程序的接口(在AWT中称为侦听器)。 –
谢谢你们,它是单线程的。我正在寻找一个很好的简化代码,并解释如何实现AWT所做的事情,你会链接到这样的东西吗? – SMC