Однажды меня спросили в одном из интервью: «В чем разница между шаблоном Observer и шаблоном Pub-Sub?». Я сразу понял, что Pub-Sub означает «Publisher—Subscriber», и тогда я точно вспомнил строку из книги «Head first Design Pattern» что:
Publishers + Subscribers = Observer Pattern
«Я понял, я понял. Вы не сможете обмануть меня». — подумал я.
Я ответил с победной улыбкой: «Они одинаковы«.
Но интервьюер улыбнулся в ответ, как будто он поймал меня и сказал: «Нет, это не так«.
Итак, что я пропустил? Почему все пошло не так? Вернувшись домой, я решил найти ответ, погуглив. Этот пост результат моего поиска.
Прежде чем углубится в разницу, давайте сначала немного поговорим о паттернах «Observer» и «Pub-Sub».
Я думаю, что многие согласятся со мной, что шаблон Observer является одним из самых простых шаблонов проектирования из всех. Я имею в виду, в отличие от большинства других шаблонов проектирования, вы можете по крайней мере «почувствовать» или легко понять, его основную концепция при первом чтении.
Шаблон observer — это шаблон, в котором объект, называемый subject, ведет список зависимых объектов, называемых observers, и автоматически уведомляет их о любых изменениях состояния, обычно вызывая один из их методов.
Видите, даже определение в Wikipedia не так сложна, верно? Если вам еще что то непонятно, давайте поясним это определение попроще.
Допустим, вы ищете работу инженера-программиста и очень заинтересованы в компании под названием «Banana Inc.». Итак, вы связались с их менеджером по найму и дали ему свой контактный номер. Он заверил вас, что если будет какая-то вакансия, они сообщат вам. Есть и другие заинтересованные кандидаты, такие как вы. Поэтому они решили сообщать всем кандидатам о вакансии и, возможно, если вы ответите, они пригласят вас на собеседование. Итак, как этот сценарий связан с шаблоном Observer? Здесь компания «Банана Инк.» является Subject, который ведет список всех Observers (кандидатов, таких как вы) и при определенном событии event то есть появление вакансии, оповещают всех notify. Разве это не просто?
Таким образом, если вам когда-либо понадобится реализовать этот сценарий в каком-либо программном обеспечении или приложении, вы можете следовать этому алгоритму и потом всем сказать, что вы внедрили «Шаблон проектирования Observer». (Я не раздуваю свою статью, показывая какой-либо пример кода, потому что есть множество примеров, доступных в Интернете)
Да, Subject в шаблоне Observer похож на издателя (Publisher), и Observer может быть полностью похожим на подписчика (Subscriber), и да, Subject уведомляет Observers о событие, как Publisher обычно уведомляет своих Subscribers. Вот почему большинство книг или статей Design Pattern используют понятие «Publisher-Subscriber», чтобы объяснить шаблон дизайна Observer. Основное различие между (реальным) шаблоном «Publisher-Subscriber» и шаблоном «Observer» заключается в следующем:
В шаблоне «Publisher-Subscriber» отправители сообщений, называемые publishers, сами ничего не знают о получателях subscribers, соответственно не создают сообщения, которые будут отправлены непосредственно определенным получателям,.
То есть это означает, что publisher и subscriber не знают о существовании друг друга. Существует третий компонент, называемый посредником, посредником сообщений или шиной событий, о котором знает как publisher, так и subscriber, и который фильтрует все входящие сообщения и распределяет их соответствующим образом. Другими словами, pub-sub — это шаблон, используемый для обмена сообщениями между различными компонентами системы, когда эти компоненты ничего не знают об друг друге. Как посредник фильтрует все сообщения? На самом деле, есть несколько процессов для фильтрации сообщений. Наиболее популярные методы: Topic-based и Content-based. Я не буду в это углубляться, если вам интересно, можете посмотреть в Wikipedia.
Если сказать об этом в двух словах, основное различие между этими двумя шаблонами может быть показано таким образом:
Понятно?
Давайте кратко перечислим различия:
Несмотря на различия между этими шаблонами, некоторые могут сказать, что шаблон Publisher-Subscriber является вариацией шаблона Observer из-за концептуального сходства между ними. И в чем это так и есть. Не нужно принимать различия буквально и религиозно. Они похожи, не так ли?
Что ж, пока это все. Надеюсь, вы поняли идею. Спасибо за чтение статьи. Пожалуйста, дайте мне знать, если есть какие-либо ошибки или какие-либо изменения, необходимые. Заранее спасибо.
Оригинальная статья: Ahmed shamim hassan — Observer vs Pub-Sub pattern
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…
View Comments
А зачем вы шаблоны на интервью обсуждаете? лол