Паттерн Publish/Subscribe (Pub/Sub) — это модель обмена сообщениями, которая разделяет производителей событий и потребителей. Издатели отправляют события в именованные топики, а подписчики регистрируют коллбэки для прослушивания этих конкретных топиков.
Publisher --> [Message Broker] --> Subscriber A
--> Subscriber B
Паттерн Observer создаёт прямую связь между субъектом и его наблюдателями — субъект хранит список наблюдателей и уведомляет их напрямую.
В отличие от этого, Pub/Sub вводит broker как посредника:
Observer: субъект знает о своих наблюдателяхPub/Sub: издатель не знает о подписчиках — broker берёт на себя всю маршрутизациюТакое разделение обеспечивает слабую связанность, что делает Pub/Sub лучшим выбором для:
const broker = { topics: {} };
broker.subscribe = (topic, callback) => {
(broker.topics[topic] ??= []).push(callback);
};
broker.publish = (topic, data) => {
broker.topics[topic]?.forEach(cb => cb(data));
};
Издатель вызывает broker.publish(), не зная, кто и сколько подписчиков получат событие — в этом и состоит основное преимущество этого паттерна.
В паттерне Pub/Sub издатель хранит прямую ссылку на всех подписчиков и сразу же вызывает их callbacks при публикации события.
Новый — ещё не проверен сообществом
Вы