创建一个简单的事件驱动架构

目前在项目上遇到一些麻烦。 我正在实施一个游戏,我想让它以事件为导向。

到目前为止,我有一个EventHandler类,它具有重载方法,具体取决于生成的事件类型(PlayerMove,Contact,Attack等)

我将有游戏驱动程序或类生成事件。 我的问题是如何在不将事件生成类紧密耦合到事件处理程序并使EDA冗余使用的情况下如何有效地处理事件?

我想设计自己的简单处理程序,而不是使用内置的Java处理程序

如果你想拥有一个带有重载方法的单个EventHandler类,并且你的事件类型没有任何子类,那么这个使用reflection的简单代码应该可以工作:

 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 ,则以下情况会更好。

 public interface EventHandler { void handle (T event); } public class PlayerMoveEventHandler implements EventHandler { @Override public void handle (final PlayerMove event) { //... handle } } public class EventRouter { private final Map eventHandlerMap = new HashMap (); 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); } }