Ответ
Observer — это паттерн, где объект (Subject) хранит список зависимостей (Observers) и уведомляет их об изменениях напрямую. Наблюдатели знают о Subject.
Pub/Sub — более гибкий: издатели (Publishers) и подписчики (Subscribers) общаются через посредника (Event Channel), не зная друг о друге.
Пример Observer:
class Subject {
constructor() {
this.observers = [];
}
notify(data) {
this.observers.forEach(observer => observer.update(data));
}
}
Пример Pub/Sub:
const events = {};
function subscribe(event, callback) {
if (!events[event]) events[event] = [];
events[event].push(callback);
}
function publish(event, data) {
events[event]?.forEach(cb => cb(data));
}
Ключевые отличия:
- В Observer связь прямая, в Pub/Sub — через брокер
- Pub/Sub позволяет более слабую связанность компонентов
- Observer обычно синхронный, Pub/Sub часто асинхронный