Сегодня я хочу рассмотреть паттерн Observer и показать вам реализацию этого паттерна в JavaScript.

Что такое Наблюдатель?

Observer — это классический шаблон проектирования, который представляет отношения между сущностью издателя и подписчика (кратко pub-sub. Кроме того, многие разработчики ссылаются на шаблон Observer, называя его «pub-sub»).

Итак, кто наблюдатель, а кто слушатель. Вкратце — Listener подписывается на Observer и реагирует на уведомления Observer.

Мы можем сравнить это с радиостанцией. Радиостанция будет транслироваться независимо от того, слушаете вы или нет. Но если вы слушаете радиостанцию, вы получаете некоторую информацию, которой можно оперировать. В терминах Observer радиостанция является издателем, когда вы являетесь подписчиком. Паттерн Observer относится к реактивному программированию.

Как реализован наблюдатель

Как я сказал ниже, для реализации этого шаблона нам нужны два класса: Publisher и Subscriber. Publisher сохраняет подписчиков и вызывает их обратные вызовы, когда метод notify вызывается на Publisher.

JavaScript-код

Давайте реализуем паттерн Observer на JavaScript.

Издатель.js:

Подписчик.js:

index.js

Пояснения

Шаги по внедрению Publisher.js:

  1. Создайте хранилище подписчиков.
  2. Реализовать метод подписки (имя, обратный вызов). Метод добавляет новый слушатель в набор.
  3. Реализовать метод описания (имя). Метод удаляет слушателя из набора по имени.
  4. Реализовать метод уведомления (сообщения). Метод выполняет метод уведомления для каждого слушателя, передавая указанное сообщение.

Шаги по внедрению Subscriber.js:

  1. Создайте атрибут для имени и обратного вызова, который будет выполняться при вызове метода уведомления (сообщения).
  2. Реализовать метод уведомления (сообщения), который выполняет обратный вызов слушателей, передавая параметр message.

В файле index.js мы объявляем Publisher и подписываемся на три разных слушателя. Затем мы вызываем метод наблюдателя notify с сообщением «Тестовая строка номер один». Затем отписываемся от третьего слушателя, чтобы проверить, работает ли метод describe. Вызовите метод уведомления еще раз. Запустите программу.

Как видим, три слушателя успешно подписаны и третий успешно описан!

Поздравляем!

Сегодня мы рассмотрели и реализовали паттерн Observer (pub-sub) в JavaScript!

Спасибо за чтение!

Буду признателен, если вы поддержите меня на Patreon или Boosty

Следите за мной в телеграмме: https://t.me/secretsupper (большую часть контента можно найти именно в телеграме).

Следите за мной в твиттере: https://twitter.com/MaksymovArtem