Наблюдатель
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

править

PascalABC.NET

править

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

править

В платформе .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). Дата обращения: 4 ноября 2019. Архивировано 4 ноября 2019 года.

📚 Artikel Terkait di Wikipedia

Delphi for PHP

языком программирования Object Pascal и его потомком Delphi. Delphi For Php 1 (2007) Delphi For Php 2 (2008) RadPhp XE (2010) RadPhp XE2 (2011) HTML5 Builder

Декоратор (шаблон проектирования)

наиболее часто используемый <?php interface IText { public function show(); } class TextHello implements IText { protected $object; public function __construct(IText

Фабричный метод (шаблон проектирования)

Impact } data object DemocracyGovernment : Government { override fun produceImpact(): Impact { return Culture("Original Movies") } } data object AuthoritarianGovernment

Шаблон проектирования

Delegate. Composite Entity/Составная Сущность. Composite View. DAO (Data Access Object) Объект Доступа к Данным. Dispatcher View. Front Controller. Intercepting

Наследование (программирование)

(класс NSObject), Perl (UNIVERSAL), Eiffel (ANY), Java (java.lang.Object), C# (System.Object), Delphi (TObject), Scala (Any). Наследование в C++: class A {};

Fluent interface

текучий интерфейс, и различия в использовании. Пример написан на Delphi Object Pascal: unit FluentInterface; interface type IConfiguration = interface

JavaScript

(ECMAScript), объектная модель браузера (Browser Object Model или BOM[англ.]), объектная модель документа (Document Object Model или DOM). Если рассматривать JavaScript

Список ORM-библиотек

Java Object Relation Mapping (Fjorm) Hibernate, ORM-фреймворк с открытым исходным кодом, широко распространен Java Data Objects (JDO) Java Object Oriented