Отношение субъект-наблюдатель не является отношением зависимости: наблюдатели не нуждаются в субъектах, чтобы существовать, и наоборот.Тем не менее, «соединение» издателей и подписчиков сильно напоминает «Dependency Injection».
В моей игре «Стреляй в глаза» широко используется паттерн «Наблюдатель».Например:
Контролирующий объект порождает объект корабля игрока в начале каждого раунда.Диспетчер призывает фабрику предоставить корабль.Корабль зависит, помимо прочего, от объекта реактора, который может перегреть и уничтожить корабль.Фабрика вводит эти зависимости.Пока все хорошо.
Теперь HUD необходимо знать о статусе корабля, в частности, о температуре реактора, но HUD не не зависит от корабля в смысле DI.: HUD сохраняется после уничтожения корабля.
Вопрос в том, что если диспетчер не имеет ссылки на HUD, как я могу установить связь HUD с кораблем?И это только один маленький, крошечный пример.У меня есть много-много объектов, которые должны будут передавать события друг другу.
Я чувствую, что могу выполнить некоторые подключения на заводе, но это кажется "неправильным" и не помогает вситуации, когда необходимо изменить существующие подписки.
В любом случае, все, что я читал о шаблоне наблюдателя, игнорирует эту более широкую проблему.Есть ли устоявшееся решение?