Найти в Дзене
.Net Review

Паттерн Наблюдать. Пример использования на C#

Оглавление

Как лучше реализовать такую архитектуру, когда есть объекты, которые зависят от общего обновления? Для решения этой задачи подходит паттерн наблюдатель.

Что из себя представляет?

Наблюдатель — поведенческий шаблон проектирования. Также известен как «подчинённые» (Dependents). Реализует у класса механизм, который позволяет объекту этого класса получать оповещения об изменении состояния других объектов и тем самым наблюдать за ними.

Пример реализации паттерна
Пример реализации паттерна

Шаблон «наблюдатель» применяется в тех случаях, когда система обладает следующими свойствами:

  • существует как минимум один объект, рассылающий сообщения;
  • имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения;
  • позволяет избежать сильного зацепления взаимодействующих классов.

Данный шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают получатели с предоставленной им информацией.

Пример

Необходимо создать систему оповещения новостей по почте, после выхода новости на сайте. Реализация паттерна будет отличаться от схемы, т.к. можно реализовать паттерн наблюдатель без использования событий.

В первую очередь необходимо реализовать сам объект отклика. Для этого напишем интерфейс и реализуем класс от него. В нём необходимо реализовать систему отклика. Другими словами, что будет происходить при создании новости на сайте. За это отвечает метод Update.

-3

Далее необходимо реализовать главный объект инициации вызова, в нашем случае это сайт.

-4

Так будет выглядеть интерфейс системы оповещения. Внутри него написаны определения добавления/удаления/оповещения объектов.

-5

Далее используем созданный механизм.

-6

Результат:

-7

В итоге получаем гибкую систему, в которой может быть множество реализаций IObserver. В ней легко передавать данные объектам IObserver.

Полный код: pastebin.

Телеграмм канал: https://t.me/dotnetreview