Что такое шаблон наблюдателя?
Шаблон наблюдателя — это шаблон проектирования программного обеспечения, в котором объект, известный как субъект, хранит список своих собственных зависимых объектов, известных как наблюдатели, и уведомляет их о любых изменениях в состоянии. Уведомления обычно выполняются путем вызова методов наблюдателя. Шаблон проектирования программного обеспечения — это просто повторно используемое решение часто возникающих проблем при проектировании программного обеспечения. Этот шаблон позволяет контролировать объект динамической группой объектов-наблюдателей. Это означает, что всякий раз, когда какое-либо значение в субъекте изменяется, все наблюдатели автоматически обновляются. При смене субъекта каждому наблюдателю могут быть запрограммированы разные задачи, однако сам субъект не знает, в чем заключаются задачи. Аналогично, наблюдатели не имеют контроля над событиями, происходящими с субъектом. Паттерн наблюдателя подпадает под категорию поведенческих паттернов.
Читайте также: Как научить машины давать рекомендации?
Для чего используется шаблон наблюдателя?
Основное использование шаблона наблюдателя — внедрение систем обработки событий. Субъектом в этом случае будет поток событий, а наблюдатели — стоки событий. Шаблон наблюдателя также используется, когда между объектами существует связь «один-ко-многим», например, если один объект изменяется, его зависимые объекты затем уведомляются автоматически.
Реальное использование шаблона наблюдателя можно увидеть на большинстве платформ социальных сетей. Всякий раз, когда человек обновляет свой статус, все его подписчики получают уведомление. В этом случае предметом является учетная запись человека, обновляющего свой статус. Наблюдатели — это все последователи человека, обновляющего свой статус, и задача, выполняемая наблюдателями из-за изменения субъекта, — получение уведомления.
В мире программирования шаблон наблюдателя используется в приложениях обмена сообщениями. Когда одно из этих приложений обновит свое состояние, все подписчики этого уведомления будут обновлены. Некоторые платформы, такие как HornetQ и JMS, используют этот шаблон. Наконец, все программирование пользовательского интерфейса Java основано на шаблоне наблюдателя. Любое запрограммированное событие будет иметь прослушиватель и назначенные функции. Слушателем в данном случае является субъект, а выполняемые функции — наблюдатели.
Что такое шаблон Pub-Sub?
Шаблон издатель-подписчик, сокращенно pub-sub, представляет собой другую версию шаблона наблюдателя. Однако, в отличие от шаблона наблюдателя, отправители сообщений, известные как издатели, не отправляют сообщения непосредственно получателям, известным как подписчики. Вместо этого существует посредник, известный как брокер, также известный как брокер сообщений или шина событий, который получает информацию от издателя и отправляет ее подписчикам. Брокер также используется для фильтрации входящих сообщений от издателей и распределения их в зависимости от того, как закодирован брокер.
В этом случае издатель и подписчик даже не знают, что другой существует, и поэтому не зависят друг от друга. Два наиболее популярных метода фильтрации сообщений — по теме и по содержанию.
В системе, основанной на темах, сообщения будут фильтроваться по специально названным каналам, известным как темы. Подписчики в этой системе будут получать сообщения только по тем темам, на которые они подписаны.
В системе, основанной на контенте, сообщение будет отправлено подписчику только в том случае, если подписчик соответствует ограничениям атрибутов сообщения. Подписчик несет ответственность за создание ограничений атрибутов. Иногда системы могут сочетать в себе содержательную и тематическую системы.
Для чего используется шаблон Pub-Sub?
Шаблон pub-sub используется, когда службы хотят взаимодействовать асинхронно со значениями задержки около 100 миллисекунд. Одним из примеров использования шаблона pub-sub является случай, когда человек хочет отправить уведомление множеству получателей.
Для этого система должна быть смоделирована таким образом, чтобы обеспечить быструю доставку событий без потери эффективности. Существует также вероятность того, что получатель может быть отключен от сети, поэтому необходима модель, в которой отправитель не знает и не заботится о том, какие клиенты находятся в сети или когда новые клиенты подключаются к системе, что является шаблоном pub-sub. Еще одно место, где используется шаблон pub-sub, — это журналы приложений. Используя шаблон pub-sub, журналы можно отправлять одновременно в большое количество подписанных пунктов назначения.
Различия между шаблонами Observer и Pub-Sub
- В шаблоне наблюдателя субъект будет знать, кто все его наблюдатели. Между субъектом и наблюдателями нет посредника. С другой стороны, при использовании шаблонов pub-sub издатель и подписчик не знают о существовании друг друга. У них есть посредник, называемый брокером, для общения друг с другом.
- Шаблон наблюдателя реализован синхронно. Это означает, что субъект вызовет метод для всех своих наблюдателей при возникновении события. При этом шаблон pub-sub реализуется асинхронно. Асинхронность означает, что события происходят не одновременно. Обычно это делается с помощью очереди сообщений, такой как Apache Kafka.
- Шаблон наблюдателя обычно применяется только в одной области приложения. Между тем, шаблон pub-sub используется как шаблон для перекрестных приложений.
Также смотрите: Amazon и сбор данных
Заключение
Несмотря на эти различия, можно утверждать, что шаблон «издатель-подписчик» — это просто вариант шаблона «наблюдатель». Это не совсем неправильно, поскольку между ними существует концептуальное сходство. Спасибо, что прочитали эту статью.
Рекомендации
О’Риордан, Мэтью. «Все, что вам нужно знать о публикации/подписке». умело в реальном времениAbly Realtime, 17 июля 2020 г., https://abilly.com/topic/pub-sub.
Шоссе, Хмельницкое. «Наблюдатель». Рефакторинг.ГуруГуру рефакторинга, https://refactoring.guru/design-patterns/observer.