Наблюдатель (Observer)

Метафора

 

Часто встречающийся шаблон из реальной жизни, представьте, что вы подписались на e-mail рассылку на каком-либо сайте, при этом, когда выходит новая статья, инициируется событие уведомления Вас о её выходе.

 

Назначение

 

Позволяет определить зависимость «один-ко-многим» так, что при изменении одного объекта, все зависимые от этого изменения объекты были оповещены об этом. В ABAP паттерн реализуется через подписку на события объекта, примером могут служить события ALV при определенных действиях пользователя. Классический же способ не подразумевает использование событий, вместо этого используется агрегация зависимых объектов в инициаторе и вызов некоторого метода у них во время срабатывания события.

 

Диаграмма

 

Наблюдатель

Наблюдатель

 

Subject – регистрирует подписчиков и работает с абстракцией Observer. Каждый зарегистрированный подписчик (ConcreteObserever) уведомляется о событии на инициаторе.

 

Пример

 

Шаблон может быть использован, если требуется дополнительная обработка при подписке/отписке на события, т.к. реализация, построенная на событиях, не может контролировать этот процесс (например, разрешить подписку на событие только после проверки на полномочия).