Другое название: Publish-Subscribe (Издатель-Подписчик).

Назначение: определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.

Общая структура решения.

 

 

Subject – субъект: располагает информацией о своих наблюдателях – за субъектом может следить любое число наблюдателей; предоставляет интерфейс для присоединения и отделения наблюдателей; реализует операцию оповещения всех наблюдателей об изменении своего состояния.

Observer – наблюдатель: определяет интерфейс обновления для объектов, которые должны быть уведомлены об изменении субъекта.

ConcreteSubject – конкретный субъект: в случае изменения состояния вызывает операцию Notify, оповещая всех своих наблюдателей об изменении состояния.

ConcreteObserver – конкретный наблюдатель: реализует интерфейс обновления, определенный в Observer, производя свое обновление при получении оповещения.

Объект ConcreteSubject уведомляет своих наблюдателей о любом изменении, которое могло бы привести к рассогласованности состояний наблюдателя и субъекта. После получения от конкретного субъекта уведомления об изменении объект ConcreteObserver может запросить у субъекта дополнительную информацию, которую использует для того, чтобы оказаться в состоянии, согласованном с состоянием субъекта. Это можно сделать, если наблюдатель располагает указателем на субъект, а субъект реализует некий интерфейс для передачи необходимой информации.