Является ли Eventbus паттерном посредника или наблюдателя? - PullRequest
13 голосов
/ 12 мая 2011

Является ли Eventbus больше посредником или наблюдателем?Согласно Google, «медиатор eventbus» получает 2.430 хитов, а «обозреватель eventbus» получает 3.850 хитов.

Из описания они будут соответствовать тому, что я пытался сделать (медиатор даже немного больше).Так реализует ли Eventbus конкретный шаблон или мне решать, что я говорю?

Ответы [ 5 ]

13 голосов
/ 14 февраля 2012

Зачастую данный фрагмент кода по сути не является примером того или иного шаблона. Вот почему они называются «шаблонами» (а не, скажем, «методами реализации»). Много программного обеспечения выглядит как один шаблон, но также напоминает другой - это хорошо. Лучше не придерживаться шаблонов ради шаблонов, а использовать их в качестве общего словаря для обсуждения архитектуры.

EventBus является одним из таких инструментов. Я написал его с учетом ситуаций, подобных наблюдателям, но если вы правильно структурируете свое приложение, оно может играть роль посредника.

11 голосов
/ 23 июня 2012

Общее использование EventBus - запуск событий.Использование слова Observer лучше подходит для этого.Шаблон наблюдателя использует события или сообщения для уведомления об изменении интересующих объектов об наблюдаемом (измененном) объекте.Посредник также пытается разъединить две реализации, но более конкретен, чем Observer, в том смысле, что он может знать все о двух объектах / интерфейсах и работает как клей, чтобы заставить эти две работы работать.Обозреватель не утверждает, что знает о внутренностях или даже интерфейсе.Все, что он знает или заботится о том, когда происходит событие, он должен уведомить заинтересованные объекты.

Посредником может быть настройка, специфичная для сценария, тогда как Observer может быть более общим.

EventBusБудучи почти всегда единичным в рамках приложения, я бы определенно классифицировал EventBus как использование Observer, поскольку его реальное намерение в большинстве случаев - облегчить глобальный обмен сообщениями между различными модулями / объектами в вашей среде выполнения.

4 голосов
/ 24 мая 2017

Я бы сказал, что типичная шина событий использует оба этих шаблона:

  • шина событий, по сути, инкапсулирует взаимодействие других объектов, поэтому является посредником
  • объекты, которые регистрируются как обработчики / прослушиватели событий, являются наблюдателями (а субъектами их наблюдений являются типы событий и / или объекты, которые производят эти события, не сама шина), например, wikipedia говорит шаблон наблюдателя " - это в основном , используемый для реализации распределенных систем обработки событий " (выделено мое), но шина событий не наблюдатель как таковой.
4 голосов
/ 23 июля 2014

Википедия: Суть шаблона посредника заключается в том, чтобы «определить объект, который инкапсулирует, как взаимодействует набор объектов»

EventBus не делает этого.

EventBus также не является шаблоном наблюдателя, потому что если у вас есть N объектов, и вы хотите общаться между всеми ними, вам нужно N * N наблюдателей, если вы используете шаблон наблюдателя, но для этого достаточно только одного глобального EventBus.job.

Таким образом, EventBus является шаблоном EventBus.

0 голосов
/ 12 мая 2011

Поскольку в предисловии написано "API публикации / подписки [...], я бы выбрал Observer.

...