我的应用层/视图有一个事件调度系统,也就是黑板。在其中,侦听器由哈希图存储,其中键是事件类型,实现为枚举 EventType,值是侦听此事件类型的侦听器引用。例如,模型对象正在侦听事件类型“LOCAL_PLAYER_INPUT”,黑板处理并通知播放器,因为播放器实现了 EventHandler 接口。
我想通过为模型实现一个独立的黑板来进一步解耦我的模型。然后它将作为侦听器添加到应用层黑板,因为应用层正在从键盘或触摸获取 I/O。模型黑板本身将进一步委托事件。为此,我想创建一个枚举层次结构,其中事件以这种方式分类:
MODEL.LOCAL.PLAYER_INPUT
只有通过像这样传递 MODEL 才能在视图黑板上将模型注册为侦听器:
addListener(model.blackboard, MODEL); //Types: (EventHandler, EventType)
通过将接口与我实现的枚举相结合,我可以编写像 MODEL.XY 这样的事件类型,但它不会被 addListener 接受,尽管 MODEL 正在实现 EventType 接口。
我应该怎么办?
编辑:更多代码
addListener 方法:
public void addListener(EventHandler handler, EventType eventType) {
getListener(eventType).add(handler);}
private Array<EventHandler> getListener(EventType eventType) {
if(map.containsKey(eventType))
return map.get(eventType);
else {
Array<EventHandler> tmp = new Array<EventHandler>(false, 1, EventHandler.class);
map.put(eventType, tmp);
return tmp;
}
}
枚举:
public interface WL extends EventType {
public static enum LOCAL {
PLAYER_INPUT,
NPC_INPUT
}
}
游戏事件:
public GameEvent(EventType eventType, Object message) {
this.eventType = eventType;
this.message = message;
timeStamp = System.currentTimeMillis();
}