Что такое паттерн Observer и где он используется?
Поведенческие паттерны
Observer устанавливает зависимость «один ко многим»: субъект хранит список подписчиков и уведомляет их об изменениях, не зная о них ничего, кроме интерфейса.
Механика
- Методы
subscribe(listener),unsubscribe(listener),notify(event). - Push-модель: субъект сам шлёт данные событием; pull-модель: подписчик забирает состояние по ссылке на субъект.
Где живёт
События интерфейса, реактивные библиотеки, EventEmitter в Node, брокеры publish-subscribe (там посредник вынесен отдельно).
Подводные камни
- Утечки памяти: забытый unsubscribe удерживает подписчика — спасают слабые ссылки и явные отписки.
- Порядок и количество уведомлений не гарантированы; каскады событий усложняют отладку.
- Синхронный notify исполняет подписчиков в потоке субъекта: один медленный тормозит всех.
Коротко для собеседования
Observer — это подписка: субъект держит список слушателей и вызывает их при изменении, не зная их конкретных типов. Так устроены DOM-события и EventEmitter; главная практическая ловушка — забытая отписка, которая удерживает подписчиков в памяти.