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

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

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

Читайте также:
  1. F68 Другие расстройства зрелой личности и поведения у взрослых
  2. IV. ОТУЧЕНИЕ: КАК ИСПОЛЬЗОВАТЬ ПОДКРЕПЛЕНИЕ, ЧТОБЫ ИЗБАВИТЬСЯ ОТ НЕЖЕЛАТЕЛЬНОГО ПОВЕДЕНИЯ
  3. Анализ поведения объекта
  4. Анализ рынка —это изучение спроса и предложения в определенной товарной категории, исследование потребительского поведения, структуры и конъюнктуры рынка.
  5. Введение в паттерны проектирования
  6. Введение в паттерны проектирования
  7. Введение в паттерны проектирования
  8. Введение в паттерны проектирования
  9. Введение в паттерны проектирования
  10. Введение в паттерны проектирования

объем информации для занесения в память хранителя или если клиенты со­здают и возвращают хранителей достаточно часто. Если плата за инкапсуля­цию и восстановление состояния хозяина велика, то этот паттерн не всегда подходит (см. также обсуждение инкрементности в разделе «Реализация»);

а определение «узкого» и «широкого» интерфейсов. В некоторых языках слож­но гарантировать, что только хозяин имеет доступ к состоянию хранителя;

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

Реализация

При реализации паттерна хранитель следует иметь в виду:

а языковую поддержку. У хранителей есть два интерфейса: «широкий» для хозяев и «узкий» для всех остальных объектов. В идеале язык реализации должен поддерживать два уровня статического контроля доступа. В C++ это возможно, если объявить хозяина другом хранителя и сделать закрытым «широкий» интерфейс последнего (с помощью ключевого слова private). Открытым (public) остается только «узкий» интерфейс. Например:

class State;

class Originator { public:

Memento* CreateMemento();

void SetMemento(const Memento*);

//... private:

State* _state; // внутренние структуры данных // ■ ■ ■

class Memento { public:

// узкий открытый интерфейс

virtual ~Memento(); private:

// закрытые члены доступны только хозяину Originator

friend class Originator;

Memento();

void SetState(State*); State* GetState();

private:

State* state;


 

Паттерн Memento

а сохранение инкрементых изменений. Если хранители создаются и возвраща­ются своему хозяину в предсказуемой последовательности, то хранитель

может сохранить лишь изменения во внутреннем состоянии хозяина. Например, допускающие отмену команды в списке истории могут пользо­ваться хранителями для восстановления первоначального состояния (см. описание паттерна команда). Список истории предназначен только для от­мены и повтора команд. Это означает, что хранители могут работать лишь с изменениями, сделанными командой, а не с полным состоянием объекта. В примере из раздела «Мотивация» объект, отменяющий ограничения, мо­жет содержать только такие внутренние структуры, которые изменяются с целью сохранить линию, соединяющую прямоугольники, а не абсолютные позиции всех объектов.




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

Паттерны поведения | Паттерн Interpreter | Назначение | Паттерны поведения | Паттерн Iterator | Паттерны поведения | Паттерны поведения | Паттерны поведения | Virtual -FontDialogDirector(); | Паттерн Memento |


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