PassFront
  1. PassFront
  2. База знаний
  3. Поведенческие паттерны

Чем Mediator отличается от Observer?

Поведенческие паттерны

Observer рассылает уведомления «один ко многим», и подписчики друг друга не координируют; Mediator собирает взаимодействие «многие ко многим» в одном объекте, который знает участников и решает, кто как реагирует.

Observer

  • Связь односторонняя: субъект → подписчики, реакция субъекта не интересует.
  • Логика размазана по подписчикам: чтобы понять последствия события, нужно найти их всех.

Mediator

  • Компоненты-коллеги общаются не напрямую, а через посредника: dialog.notify(this, 'changed').
  • Форма бронирования: галка «туда-обратно» включает вторую дату, выбор страны меняет список городов, кнопка активна только при валидных полях. Без посредника каждое поле ссылается на соседей — до N(N−1) связей, с посредником — N.
  • Сценарий собран в одном месте, его легко читать и менять.
  • Риск: посредник разрастается в God Object — его делят по сценариям.

Как соотносятся

  • Не исключают друг друга: посредника часто строят на Observer — коллеги публикуют события, посредник подписан на всех.
  • Различие в намерении: Observer распространяет изменения, Mediator координирует равноправных участников и снижает связанность между ними.
  • Примеры посредника: диспетчер аэропорта из учебников, оркестратор саги в микросервисах, контейнер-компонент в React, управляющий дочерними.

Коротко для собеседования

Observer просто распространяет изменения подписчикам, а Mediator — центральный координатор, через который общаются равноправные компоненты. Посредник убирает связи каждый-с-каждым и собирает сценарий в одном месте, но его нужно дробить по сценариям, чтобы он не превратился в God Object.

Другие вопросы раздела