Наблюдатель (шаблон проектирования)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Шаблон проектирования
Наблюдатель
Observer
Observer.png
Тип:

поведенческий

Назначение:
  • Паттерн Observer определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются и обновляются автоматически;
  • Паттерн Observer инкапсулирует главный (независимый) компонент в абстракцию Subject и изменяемые (зависимые) компоненты в иерархию Observer;
  • Паттерн Observer определяет часть "View" в модели Model-View-Controller (MVC)[1].
Описан в Design Patterns

Да

Шаблон Наблюдатель(англ. observer) — поведенческий шаблон проектирования. Также известен как «подчинённые» (Dependents), «издатель-подписчик» (Publisher-Subscriber). Создает механизм у класса, который позволяет получать оповещения от других класса об изменении их состояния, тем самым наблюдая за ними[2].

Содержание

Назначение[править]

Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

Реализация[править]

Observer.png

При реализации шаблона «наблюдатель» обычно используются следующие классы:

  • Observable — интерфейс, определяющий методы для добавления, удаления и оповещения наблюдателей;
  • Observer — интерфейс, с помощью которого наблюдатель получает оповещение;
  • ConcreteObservable — конкретный класс, который реализует интерфейс Observable;
  • ConcreteObserver — конкретный класс, который реализует интерфейс Observer.

Область применения[править]

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

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

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

Примеры[править]

PHP5 (SPL)[править]

PHP5[править]

C#[править]

Java[править]

C++[править]

ActionScript[править]

VB.NET[править]

Дополнительная информация[править]

В платформе .NET Framework 4.0 шаблон разработки наблюдателя применяется путем реализации универсальных интерфейсов System.IObservable<T> и System.IObserver<T>[3].

Примечания[править]

  1. Паттерн Observer. Архивировано из первоисточника 14 июня 2013. Проверено 13 июня 2013.
  2. Шаблон разработки Observer. Архивировано из первоисточника 14 июня 2013. Проверено 13 июня 2013.
  3. Шаблон разработки Observer. Архивировано из первоисточника 14 июня 2013. Проверено 13 июня 2013.


Поведенческие шаблоны проектирования

Interpreter/Интерпретатор | Template Method/Шаблонный метод | Command/Команда | Chain of Responsibility/Цепочка обязанностей | Iterator/Итератор, Cursor | Mediator/Посредник | Memento/Хранитель, Token | Observer/Наблюдатель, Listener | State/Состояние | Strategy/Стратегия | Visitor/Посетитель | Event listener | Single-serving visitor | Hierarchical visitor |