Схема наблюдателя - варианты - PullRequest
0 голосов
/ 13 марта 2012

Шаблон наблюдателя: Есть 2 варианта.

  1. Где Субъекты информируют всех наблюдателей о том, когда произошло событие
  2. Наблюдатель может запросить субъект, произошло ли событие или нет.

Я думаю о каких-либо реальных примерах, которые применимы для варианта 2?

Я использовал вариант 1, в одном из моих проектов, где есть какое-то конкретное событие (в моем сокете), все наблюдатели, которые зарегистрированы для этого события, получают уведомление.

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

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

Что на самом деле описала книга «Шаблоны проектирования» и что вы, возможно, имели в виду, это:

  1. Всякий раз, когда субъект изменяется, измененные значения передаются наблюдателю (в качестве аргументов для вызова notify).
  2. Всякий раз, когда субъект изменяется, наблюдатель извлекает новое состояние из субъекта по мере необходимости (без аргументов для вызова 'notify').

Вариант использования для второго подхода:

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

0 голосов
/ 15 марта 2012

Думает о клиентах мобильной электронной почты.Вы можете отправить данные на свой телефон (push) или получать электронные письма только при проверке почты (pull).Позднее дело, о котором вы спрашиваете.Обычно это параметры, которые вы можете настроить при настройке или редактировании учетной записи.

Другой пример ...

Запущенный веб-запрос ajax.Если на веб-странице есть приложение погоды, которое обновляется только при обновлении страницы, или происходит событие, эта страница / приложение получает данные с сервера.С другой стороны, вы можете использовать такие сервисы, как Pusher App, которые могут отправлять данные на вашу страницу / приложение для обновления в режиме реального времени.

Извлечение данных позволяет вашему наблюдателю работать автономно, но при этом получать поддержку от Observable.

0 голосов
/ 13 марта 2012

Я думаю, что не все предметное событие заинтересовано наблюдателями, поэтому, если использовать «push», некоторым наблюдателям может не понадобиться знать событие, но, используя «pull», наблюдатели знают, что они хотят получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...