Ответ
Observer — это поведенческий паттерн проектирования, который создаёт механизм подписки, позволяющий одним объектам (наблюдателям) следить и реагировать на изменения в другом объекте (субъекте).
Пример:
class Subject {
constructor() {
this.observers = [];
}
subscribe(observer) {
this.observers.push(observer);
}
unsubscribe(observer) {
this.observers = this.observers.filter(obs => obs !== observer);
}
notify(data) {
this.observers.forEach(observer => observer.update(data));
}
}
class Observer {
update(data) {
console.log('Получены данные:', data);
}
}
const subject = new Subject();
const observer = new Observer();
subject.subscribe(observer);
subject.notify('Новое событие!'); // Выведет: "Получены данные: Новое событие!"
Используется:
- Реактивные системы (например, Vue, React)
- Событийные модели (например, DOM Events)
- Pub/Sub системы
Плюсы:
- Гибкость (легко добавлять/удалять наблюдателей)
- Снижение связанности (субъект не знает детали наблюдателей)
Минусы:
- Неожиданные обновления (если цепочка вызовов сложная)
- Потенциальные утечки памяти (если не отписаться)