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

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

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

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

Да

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

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

Назначение[править | править вики-текст]

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

Реализация[править | править вики-текст]

 Observer UML

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

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

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

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

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

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

Примеры[править | править вики-текст]

PHP5 (SPL)[править | править вики-текст]

PHP5[править | править вики-текст]

C#[править | править вики-текст]

Java[править | править вики-текст]

C++[править | править вики-текст]

ActionScript[править | править вики-текст]

VB.NET[править | править вики-текст]

Ruby[править | править вики-текст]

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

В платформе .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.

Примечания[править | править вики-текст]