Что является противоположностью модели наблюдателя? - PullRequest
16 голосов
/ 10 февраля 2011

Насколько я понимаю, схема наблюдателя позволяет нескольким наблюдателям контролировать один объект. Есть ли образец для противоположного сценария? Существует ли шаблон для одного наблюдателя, который наблюдает за несколькими субъектами и отвечает, когда любой из них вызывает, скажем, событие Notify?

Ответы [ 5 ]

14 голосов
/ 10 февраля 2011

Можно использовать шаблон Observer: просто зарегистрируйте один и тот же объект в качестве наблюдателя для многих наблюдаемых объектов.Возможно, вы захотите, чтобы событие «Уведомить» получило некоторый идентификатор объекта наблюдаемого (указатель «this», уникальный идентификатор и т. Д.), Чтобы объект наблюдатель мог выбрать действие, соответствующее объекту, сообщающему о событии.1001 *

3 голосов
/ 10 февраля 2011

Да.Это просто еще одно применение шаблона наблюдателя.

Наблюдатель добавляет себя ко многим субъектам.Если вы хотите, чтобы одно и то же действие было выполнено независимо от того, какой объект вы наблюдаете, это точно так же, как и шаблон наблюдателя, который вы используете.

Если вы хотите отдельное действие в зависимости от того, какой субъект вызвал событиезатем вы можете использовать параметр Action, который передается в метод ActionPerformed Observer, чтобы помочь определить, какой субъект вызвал событие.(эти имена могут меняться в зависимости от вашего языка или библиотеки по вашему выбору)

1 голос
/ 15 июля 2014

Также рассмотрите связанный образец Посредника.

Шаблон-посредник определяет объект, который инкапсулирует, как взаимодействует набор объектов ( Wikipedia )

Подробнее здесь: http://sourcemaking.com/design_patterns/mediator

Мне также очень нравится ответ @ CDC на Шаблоны объектно-ориентированного проектирования Mediator Vs Observer :

Шаблон Observer : определяет одно-много зависимости между объектами, так что когда один объект изменяет состояние, все его иждивенцы уведомляются и обновляются автоматически.

Шаблон посредника : определение объекта, который инкапсулирует, как взаимодействует набор объектов.Посредник способствует слабой связи, не позволяя объектам явно ссылаться друг на друга, и позволяет независимо изменять их взаимодействие.

1 голос
/ 18 декабря 2011

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

0 голосов
/ 10 февраля 2011

если вы хотите, чтобы наблюдатель реагировал один раз, независимо от того, сколько отслеживаемых объектов вызывает событие, то вам потребуется, чтобы часть обработчика событий «отменила регистрацию» наблюдателя от всех других источников, как только первый источник вызовет событие или вам придется решить, как часто или какие временные критерии следует использовать, чтобы решить, когда событие из другого (или того же источника снова через некоторый определенный интервал) должно заставить наблюдателя реагировать снова ...

...