java - 事件处理,数据结构和程序设计,java

标签 java design-patterns data-structures event-handling

我有一个事件类型列表

enum EventType {
    ErrorEvent, StatusEvent, DataEvent 
}

一个监听器可以通过调用注册多个事件

addListener (Listener listener,EventType eventType) {
    // to do 
}

任何人都可以建议,我可以使用什么数据结构来存储所有这些信息 (监听器及其关联的事件类型)

或任何其他 java API 类已经支持此功能?

数组的数组或 列表列表对我来说看起来很难看。

请提出建议

提前致谢。

最佳答案

使用列表的 EnumMap(如果您希望监听器唯一,则使用集合)。

private Map<EventType, List<Listener>> listeners = 
  new EnumMap<EventType, List<Listener>>(EventType.class);

public void addListener(Listener listener, EventType eventType) {
  if(null == listeners.get(eventType)) {
    listeners.put(eventType, new ArrayList<Listener>());
  }

  listeners.get(eventType).add(listener);
}

private void sendEvent(Event e) {
  if(listeners.get(e.getType() == null) {
    return;
  }

  for(Listener listener : listeners.get(e.getType()) {
    listener.eventOccurred(e);
  }
}

关于java - 事件处理,数据结构和程序设计,java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490133/

相关文章:

c++ - 智能指针/编码模式的名称

java - 直接在 Treeset 中添加元素与从 arraylist 传输元素的性能有何差异?

data-structures - 结构化数据 > 微数据和 Json-LD > 实体 ID > 片段标识符

java - 从模式生成接口(interface)

java - HTTPclient 和 cookie 的问题

java - 类上的@param javadoc

java - mymap = new int[500000][500000]; 需要多大的 Eclipse Java 堆空间没有内存不足错误?

c++ - 如何将适用于不同数字类型的 C 函数库包装到 C++ 模板类中

database - 表单在什么时候丢失其 "Model-ness"并成为文档?

c++ - 插入跳表