Я нахожусь в ситуации, когда я хотел бы отправить объект нескольким четным обработчикам, но некоторые из них используют данные, созданные другими обработчиками. Это звучит довольно неясно - читая это сам, я не думаю, что понял бы то, о чем говорил - поэтому приведу пример.
Допустим, у меня есть следующее:
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
.
Есть идеи о лучшем подходе?