2011-01-10 3 views

ответ

2

Думай о нем, как издатель/абонентском модели.

Пример может служить запасами

Когда цена акций объекта (предмет) обновляются, любой «инвестор» (наблюдатель), который подписан на эту акцию уведомляется обновленной цена

0

Наблюдатель используется в ситуациях, когда требуется, чтобы разрозненные компоненты кода были уведомлены, когда что-то изменилось. Системы, основанные на событиях, приходят на ум. Как правило, в системах на основе событий, когда вы регистрируете обработчик, любая используемая вами фреймворк будет использовать реализацию наблюдателя для уведомления обработчиков при срабатывании события.

Одна область, которую я видел, используется в рамках Sproutcore. Структура имеет функцию, называемую «наблюдение за ключевыми знаками». В принципе, вы можете настроить наблюдателей на поле объекта, и когда это значение поля изменится, наблюдатели автоматически срабатывают. Это выгодно, потому что, например, если элемент представления имеет наблюдателя на макете родительского представления, когда ситуация меняется, представление может перерисовываться. Или, скажем, значение изменяется, и вам нужно пересчитать некоторые другие значения, вы установите наблюдателя на начальное значение, а затем от своего наблюдателя вы можете выполнить пересчет.

См http://en.wikipedia.org/wiki/Observer_pattern

+1

Похоже на прослушиватель событий? – Prisoner

+0

@nathan, правильный. Как правило, в системах на основе событий, когда вы регистрируете обработчик, любая используемая вами фреймворк будет использовать реализацию наблюдателя для уведомления обработчиков при срабатывании события. – hvgotcodes

0

Observer pattern используется, когда объект должен уведомить другой объект (ы) , если она изменяется. , Таким образом, диаграмма наблюдателя имеет

1) Предмет или источник: на каком бы то ни было событие .

2) Один или несколько наблюдателей: Кому Источник необходимо уведомить, имеет место какие-либо изменения .

Вот хорошая статья по этому вопросу:

0

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

0

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

Предположим, у вас установлен флажок, и в зависимости от состояния (отмеченного или непроверенного) вы хотите, чтобы другие компоненты были видимыми или нет. Количество других компонентов может быть переменным. Поэтому вы хотите, чтобы все они регистрировались с помощью флажка. Флажок затем уведомляет каждого наблюдателя о том, что изменение произошло, когда пользователь нажимает, и они могут решить, как реагировать на это изменение. Итак, логика того, как они реагируют, находится в наблюдателях. Флажок не должен знать, что они делают.

Смежные вопросы