Найти тему
using Dev

Наблюдатель C#

Оглавление

Паттерн "Наблюдатель" (Observer) — это поведенческий шаблон проектирования, который позволяет объектам следить за изменениями другого объекта и реагировать на эти изменения. Он особенно полезен в ситуациях, когда один объект зависит от состояния или поведения другого объекта, но при этом хочет оставаться независимым от его внутренней реализации.

Описание

Основные компоненты:

  • Субъект (Subject): Объект, который может быть наблюдаемым. Содержит список наблюдателей и предоставляет им возможность уведомлять о своих изменениях.
  • Наблюдатель (Observer): Объект, который хочет следить за изменениями субъекта. Реализует интерфейс, который позволяет ему получать уведомления от субъекта.
  • Интерфейс Observer: Определяет методы, которые должен реализовать наблюдатель, чтобы получать уведомления от субъекта.

Процесс работы:

  1. Наблюдатель регистрируется в субъекте.
  2. Когда состояние субъекта меняется, он уведомляет всех зарегистрированных наблюдателей.
  3. Наблюдатели реагируют на изменения, обновляя свое состояние или выполняя другие действия в ответ на изменения субъекта.

Применение в общем виде

Паттерн "Наблюдатель" широко используется в различных областях программирования, где требуется реализация системы оповещений или реакции на изменения состояния объектов. Например:

  • Работа с GUI: Приложения, которые реагируют на изменения состояния пользовательского интерфейса, могут использовать наблюдателя для отслеживания изменений и обновления интерфейса соответственно.
  • Базы данных: Системы управления базами данных могут использовать наблюдателей для отслеживания изменений в данных и автоматического обновления связанных объектов.
  • Многопользовательские игры: Игры, поддерживающие многопользовательскую игровую среду, могут использовать наблюдателей для синхронизации состояний игроков и обновления игрового мира.

Пример

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

Создадим интерфейс наблюдателя IObserver

-2

Создадим интерфейс наблюдаемого объекта IObservable

-3

Реализуем интерфейс наблюдаемого объекта в классе Product

-4

Создадим классы наблюдателей

-5
-6

Посмотрим применение.

-7
-8

Наука
7 млн интересуются