Observer (модель)

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

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

Классы, на события которых другие классы подписываются, называются субъектами (Subjects), а подписывающиеся классы называются наблюдателями (англ. Observers)[3].

Похожие шаблоны: «издатель-подписчик», «посредник», «одиночка».


Назначение[ | ]

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

Реализация[ | ]

Observer UML

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

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

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

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

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

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

Примеры[ | ]

PHP5 (SPL)[ | ]

PHP5[ | ]

C#[ | ]

Java[ | ]

C++[ | ]

ActionScript[ | ]

VB.NET[ | ]

Python[ | ]

Object Pascal[ | ]

Ruby[ | ]

Rust[ | ]

Io

JavaScript ES6[ | ]

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

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

Литература[ | ]

  • Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns. Elements of Reusable Object-Oriented Software. — СПб: Питер, 2009. — 366 с. — ISBN 978-5-469-01136-1.
  • Эрик Фримен, Элизабет Фримен. Паттерны проектирования = Head First Design Patterns. — СПб: Питер, 2011. — 656 с. — ISBN 978-5-459-00435-9.

Примечания[ | ]

  1. Паттерн Observer. Дата обращения: 13 июня 2013. Архивировано 13 июня 2013 года.
  2. 1 2 Шаблон разработки Observer. Дата обращения: 13 июня 2013. Архивировано 13 июня 2013 года.
  3. Паттерн наблюдатель (Observer).