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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Другие значения Шаблон:Шаблон проектирования

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

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

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

Назначение

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

Реализация

Observer UML

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

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

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

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

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

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

Примеры

PHP5 (SPL)

Шаблон:Hider hiding

PHP5

Шаблон:Hider hiding

C#

Шаблон:Hider hiding

Java

Шаблон:Hider hiding

C++

Шаблон:Hider hiding

ActionScript

Шаблон:Hider hiding

VB.NET

Шаблон:Hider hiding

Python

Шаблон:Hider hiding

Object Pascal

Шаблон:Hider hiding

Ruby

Шаблон:Hider hiding

Rust

Шаблон:Hider hiding

Io Шаблон:Hider hiding

JavaScript ES6

Шаблон:Hider hiding

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

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

Литература

Примечания

Шаблон:Примечания

Шаблон:Типы шаблонов проектирования