Наблюдатель (Observer) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Участники) |
Admin (обсуждение | вклад) (→Участники) |
||
Строка 25: | Строка 25: | ||
==== Участники==== | ==== Участники==== | ||
* Subject - субъект | * Subject - субъект | ||
+ | ** Хранит список своих наблюдателей | ||
+ | ** Предоставляет интерфейс для присоединения и отсоединения наблюдателей | ||
+ | ** Имеет метод оповещения всех подписанных на него наблюдателей | ||
* Observer - наблюдатель | * Observer - наблюдатель | ||
+ | ** Определяет метод Update() для обновления состояния потомков наблюдателя | ||
* ConcreteSubject - конкретный субъект | * ConcreteSubject - конкретный субъект | ||
+ | ** Имеет состояние, представляющее интерес дял конкретного наблюдателя | ||
+ | ** Посылает информацию наблюдателям, когда происходит изменение | ||
* ConcreteObserver - конкретный наблюдатель | * ConcreteObserver - конкретный наблюдатель | ||
+ | ** Хранит ссылку на своего субъекта, за изменением состояния которого он следит. | ||
+ | ** Сохраняет на своей стороне данные, которые должны быть согласованы с данными субъекта | ||
+ | ** Реализует метод Update() | ||
==== Диаграмма последовательности ==== | ==== Диаграмма последовательности ==== |
Версия 11:39, 21 июля 2014
Другое имя
Издатель-Подписчик (Publisher-Subscriber)
Назначение
При изменении состояния одного объекта все зависимые от него объекты (подписчики) оповещаются об обновлении.
Описание
В системе, в которой одни объекты зависят от других, необходимо согласованное обновление информации.
Ключевыми в паттерне Наблюдатель являются Субъект и Наблюдатель. У Субъекта может быть сколько угодно зависимых от него наблюдателей.
Все наблюдатели уведомляются об изменениях в состоянии субъекта. Получив уведомление, наблюдатель опрашивает Субъекта с тем чтобы синхронизировать с ним своё состояние.
Использование
- Когда у абстракции есть два аспекта, один из которых зависит от другого.
- Когда при модификации одного объекта требуется изменить единым образом неизвестное количество других объектов.
- Когда нужно разорвать жесткую связь между связанными объектами, один из которых зависит от другого
Реализация
Диаграмма классов
Участники
- Subject - субъект
- Хранит список своих наблюдателей
- Предоставляет интерфейс для присоединения и отсоединения наблюдателей
- Имеет метод оповещения всех подписанных на него наблюдателей
- Observer - наблюдатель
- Определяет метод Update() для обновления состояния потомков наблюдателя
- ConcreteSubject - конкретный субъект
- Имеет состояние, представляющее интерес дял конкретного наблюдателя
- Посылает информацию наблюдателям, когда происходит изменение
- ConcreteObserver - конкретный наблюдатель
- Хранит ссылку на своего субъекта, за изменением состояния которого он следит.
- Сохраняет на своей стороне данные, которые должны быть согласованы с данными субъекта
- Реализует метод Update()