Обработка событий, структура данных и дизайн программы, Java - PullRequest
1 голос
/ 27 июня 2011

у меня есть список типов событий

enum EventType {
    ErrorEvent, StatusEvent, DataEvent 
}

один слушатель может зарегистрироваться на более чем событие, позвонив

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

Может ли кто-нибудь предложить, какую структуру данных я могу использовать для хранения всей этой информации? (слушатель и связанные с ним типы событий)

или другие классы API Java уже поддерживают это?

массив массивов или список список выглядит мне некрасиво.

Пожалуйста, предложите

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Используйте 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);
  }
}
0 голосов
/ 27 июня 2011

Похоже, вы, как и многие другие, начинаете заново изобретать знаменитый PropertyChangeListener / PropertyChangeEvent / PropertyChangeSupport .Итак, сделайте себе одолжение, и вместо создания собственной иерархии событий / слушателей используйте эту универсальную иерархию, которая специально предназначена для изменений свойств компонентов (и, как следствие, для всех объектов Java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...