Другое название: Publish-Subscribe (Издатель-Подписчик).
Назначение: определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.
Общая структура решения.
Subject – субъект: располагает информацией о своих наблюдателях – за субъектом может следить любое число наблюдателей; предоставляет интерфейс для присоединения и отделения наблюдателей; реализует операцию оповещения всех наблюдателей об изменении своего состояния.
Observer – наблюдатель: определяет интерфейс обновления для объектов, которые должны быть уведомлены об изменении субъекта.
ConcreteSubject – конкретный субъект: в случае изменения состояния вызывает операцию Notify, оповещая всех своих наблюдателей об изменении состояния.
ConcreteObserver – конкретный наблюдатель: реализует интерфейс обновления, определенный в Observer, производя свое обновление при получении оповещения.
Объект ConcreteSubject уведомляет своих наблюдателей о любом изменении, которое могло бы привести к рассогласованности состояний наблюдателя и субъекта. После получения от конкретного субъекта уведомления об изменении объект ConcreteObserver может запросить у субъекта дополнительную информацию, которую использует для того, чтобы оказаться в состоянии, согласованном с состоянием субъекта. Это можно сделать, если наблюдатель располагает указателем на субъект, а субъект реализует некий интерфейс для передачи необходимой информации.