Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Паттерн Observer

Читайте также:
  1. Введение в паттерны проектирования
  2. Введение в паттерны проектирования
  3. Введение в паттерны проектирования
  4. Введение в паттерны проектирования
  5. Введение в паттерны проектирования
  6. Введение в паттерны проектирования
  7. Гдд Паттерны поведения
  8. Глава 1. Введение в паттерны проектирования
  9. Глава 3. Порождающие паттерны
  10. Глава 4. Структурные паттерны

У класса ChangeManager есть три обязанности:

- строить отображение между субъектом и его наблюдателями и предо­
ставлять интерфейс для поддержания отображения в актуальном состоя­
нии. Это освобождает субъектов от необходимости хранить ссылки на
своих наблюдателей и наоборот;

- определять конкретную стратегию обновления;

- обновлять всех зависимых наблюдателей по запросу от субъекта.

На следующей диаграмме представлена простая реализация паттерна на­блюдатель с использованием менеджера изменений ChangeManager. Име­ется два специализированных менеджера. SimplechangeManager всегда обновляет всех наблюдателей каждого субъекта, a DAGChangeManager обра­батывает направленные ациклические графы зависимостей между субъектами и их наблюдателями. Когда наблюдатель должен «присматривать» за несколь­кими субъектами, предпочтительнее использовать DAGChangeManager. В этом случае изменение сразу двух или более субъектов может привести к избыточ­ным обновлениям. Объект DAGChangeManager гарантирует, что наблюдатель в любом случае получит только одно уведомление. Если обновление одного и того же наблюдателя допускается несколько раз подряд, то вполне достаточ­но объекта SimplechangeManager.

ChangeManager - это пример паттерна посредник. В общем случае есть только один объект ChangeManager, известный всем участникам. Поэтому полезен будет также и паттерн одиночка;

а комбинирование классов Subject и Observer, В библиотеках классов, которые на­писаны на языках, не поддерживающих множественного наследования (на­пример, на Smalltalk), обычно не определяются отдельные классы Subject и Observer. Их интерфейсы комбинируются в одном классе. Это позво­ляет определить объект, выступающий в роли одновременно субъекта


 

Паттерны поведения

и наблюдателя, без множественного наследования. Так, в Smalltalk интерфей­сы Sub j ect и Observer определены в корневом классе Obj ect и потому до­ступны вообще всем классам.

Пример кода

Интерфейс наблюдателя определен в абстрактном классе Observer:

class Subject;

class Observer { public:

virtual -Observer ();

virtual void Update (Subject* theChangedSubject) = 0; protected:

Observer (),-

};

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

Таким же образом в абстрактном классе Subject определен интерфейс субъекта:

class Subject { public:




Дата добавления: 2015-09-11; просмотров: 87 | Поможем написать вашу работу | Нарушение авторских прав

Паттерны поведения | Паттерны поведения | Virtual -FontDialogDirector(); | Паттерн Memento | Участники | Паттерны поведения | Пример кода | Паттерн Memento | Паттерн Observer | Реализация |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав