Что такое шаблон проектирования Observer?

Согласно GoF, шаблон проектирования Observer должен «определять зависимость «один ко многим» между объектами, чтобы при изменении состояния одного объекта все его зависимые объекты уведомлялись и обновлялись автоматически».

Диаграмма классов шаблона проектирования наблюдателя:

Как мы видим на диаграмме классов, шаблон проектирования наблюдателя состоит из двух основных компонентов:

1- Тема:

Они издатели. Когда в субъекте происходит изменение, он должен уведомить всех своих подписчиков.

2- Наблюдатели:

Они подписчики. Они просто прислушиваются к изменениям в предметах.

Понимание шаблона проектирования наблюдателя на примере:

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

Предположим, что на сайте Amazon есть опция под названием уведомить меня, когда статус продукта изменится на Доступен, и три вышеуказанных пользователя присоединились к этой опции.

В наших примерах MobilePro является субъектом, а три пользователя (т. е. User1, User2 и User3) являются наблюдателями. Для лучшего понимания посмотрите на следующие две диаграммы.

Реализация:

Ссылка на полный код на Github:

BehavioralDesignPatterns/02-ObserverDP