Чем Mediator отличается от Observer?
Поведенческие паттерны
Observer рассылает уведомления «один ко многим», и подписчики друг друга не координируют; Mediator собирает взаимодействие «многие ко многим» в одном объекте, который знает участников и решает, кто как реагирует.
Observer
- Связь односторонняя: субъект → подписчики, реакция субъекта не интересует.
- Логика размазана по подписчикам: чтобы понять последствия события, нужно найти их всех.
Mediator
- Компоненты-коллеги общаются не напрямую, а через посредника:
dialog.notify(this, 'changed'). - Форма бронирования: галка «туда-обратно» включает вторую дату, выбор страны меняет список городов, кнопка активна только при валидных полях. Без посредника каждое поле ссылается на соседей — до N(N−1) связей, с посредником — N.
- Сценарий собран в одном месте, его легко читать и менять.
- Риск: посредник разрастается в God Object — его делят по сценариям.
Как соотносятся
- Не исключают друг друга: посредника часто строят на Observer — коллеги публикуют события, посредник подписан на всех.
- Различие в намерении: Observer распространяет изменения, Mediator координирует равноправных участников и снижает связанность между ними.
- Примеры посредника: диспетчер аэропорта из учебников, оркестратор саги в микросервисах, контейнер-компонент в React, управляющий дочерними.
Коротко для собеседования
Observer просто распространяет изменения подписчикам, а Mediator — центральный координатор, через который общаются равноправные компоненты. Посредник убирает связи каждый-с-каждым и собирает сценарий в одном месте, но его нужно дробить по сценариям, чтобы он не превратился в God Object.