Обмен данными между обработчиками событий? - PullRequest
0 голосов
/ 08 августа 2009

Я нахожусь в ситуации, когда я хотел бы отправить объект нескольким четным обработчикам, но некоторые из них используют данные, созданные другими обработчиками. Это звучит довольно неясно - читая это сам, я не думаю, что понял бы то, о чем говорил - поэтому приведу пример.

Допустим, у меня есть следующее:

interface ChangeListener
{
   public add_change(Change)
   // ...
}

class ListenerA implements ChangeListener{...}
class ListenerB implements ChangeListener{...}

и где имеет место фактическая логика:

List changes = ... // populated from somewhere else
List handlers = [new ListenerA(), new ListenerB()]

foreach(change in changes)
  foreach(handler in handlers)
    handler.add_change(change)

Моя проблема в том, что часть, что будет делать ListenerA, - это создание URL для изменения, и я бы хотел, чтобы ListenerB имел доступ к этому URL (чтобы он мог его использовать). В качестве конкретного примера, ListenerA может использовать API ведения блога для создания сообщения об изменении, а затем ListenerB может отправить электронное письмо с этим URL.

Один из вариантов: прослушиватель A добавляет свойство к объекту Change с помощью только что созданного URL-адреса, но я не уверен, что мне нравится осваивать объект. Другим было бы просто вызвать их по порядку и передать значение (в отличие от циклического прохождения через них), но я пытаюсь сохранить четкое разделение проблем между этой частью (которая рассылает изменения) и слушателями, которые пытаются и выяснить, как с ними обращаться - чтобы в будущем все, что нужно для добавления ListenerC, было бы добавление объекта в список handlers.

Есть идеи о лучшем подходе?

1 Ответ

1 голос
/ 08 августа 2009

Похоже, что вы хотите, чтобы слушатель B слушал слушателя A вместо того, чтобы оба слушали один и тот же объект. В основном это будет цепь. Объект меняется и сообщает своим слушателям (Listener A). Слушатель А меняется и сообщает своим слушателям (Слушатель Б).

Поскольку B зависит от A, именно там B должен слушать.

...