ITVDN: курсы программирования
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка
ITVDN logo
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка
Видео курс по шаблонам проектирования
основные темы, рассматриваемые на уроке
1 0:00:27

Метафора

2 0:04:16

Программный код метафоры

3 0:07:24

Структура паттерна на языке UML

4 0:08:01

Структура паттерна на языке C#

5 0:09:32

«Когда использовать паттерн ?»

6 0:16:52

Назначение паттерна

Описание видеоурока
Титры видеоурока
Скачать материалы
Рекомендуемая литература
Видео урок посвящен поведенческому шаблоны проектирования Memento (хранитель), который не нарушая инкапсуляции, фиксирует и выносит за пределы объекта-хозяина его внутреннее состояние так, чтобы позднее это вынесенное состояние можно было восстановить в исходном объекте-хозяине.

Паттерн Memento

Название

Хранитель

Также известен как

Token (Лексема)

Классификация

По цели: поведенческий

По применимости: к объектам

Частота использования

Низкая                  -   1 2 3 4 5

Назначение

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

Введение

Воспользуемся метафорой для описания работы паттерна Memento. Представьте себе, что Вы приобрели робота ASIMO и отправились с ним на прогулку, дошли до городского пляжа и решили искупаться. Вы сняли с себя одежду, сложили одежду в рюкзак, отдали рюкзак роботу, а сами пошли в воду. Задача робота – стеречь рюкзак. Инженеры HONDA пока еще не научили ASIMO открывать рюкзаки, поэтому он не сможет получить доступ к вещам и, например, поменять Ваши джинсы на новый сервопривод или аккумулятор.

Поплавав, Вы вышли из воды на берег, взяли рюкзак у робота, достали из рюкзака одежду и одели одежду на себя.

Рассмотрим основных участников паттерна Memento:

Важно помнить, что состояние объекта – это набор значений полей этого объекта. Одежда человека может входить в понятие одной из разновидностей состояний человека, так как одежду можно описать в виде набора переменных, принадлежащих объекту-человеку. И зачастую, когда нас просят описать человека, то мы помимо биометрических данных, зачастую указываем фасон и цвет одежды в которую одет человек.

Человек (Man) – хозяин (сложный объект со сложной конфигурацией состояния), которому по ряду причин потребовалось изменить свое состояние «из одетого в раздетого», а потом восстановить свое состояние обратно в первоначальный вид «из раздетого в одетого».

Рюкзак (Backpack) – хранитель (объект для хранения в себе копии состояния хозяина). Рюкзак с одеждой (состоянием хозяина) переходит из рук хозяина в руки робота, а позднее обратно из рук робота в руки хозяина. Это удобно, потому что возможно у робота есть еще и сумка с предыдущим состоянием хозяина, например, со смокингом со вчерашнего посещения оперы.

Робот (Robot) – посыльный (объект для ношения рюкзаков и сумок с состояниями хозяина) в любой момент готов дать хозяину нужную сумку или рюкзак с определенным набором вещей (предыдущие состояния). Человеку не требуется заботиться о поиске нужной конфигурации состояния, за него всю заботу за конфигурацию и хранение состояний берет на себя робот.

Из сказанного выше легко сформировать модель и реализовать ее программно.

См. пример к главе: \018_Memento\002_Memento

Структура паттерна на языке UML

См. пример к главе: \018_Memento\001_Memento

Структура паттерна на языке C#

См. пример к главе: \018_Memento\001_Memento

Участники

  • Memento - Хранитель:

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

  • Originator - Хозяин:

Создает объекта-хранителя и помещает в него свое текущее внутреннее состояние. Впоследствии использует объекта-хранителя для восстановления своего ранее сохраненного состояния.

  • Caretaker - Посыльный:

Отвечает за сохранность объекта-хранителя и не производит над ним никаких действий, и не исследует его внутреннее содержимое.

Отношения между участниками

Отношения между классами

  • Класс Originator связан связью отношения зависимости с классом Memento.
  • Класс Caretaker связан связью отношения агрегации с классом Memento.

Отношения между объектами

  • Объект-посыльный (Caretaker) получает от объекта-хозяина (Originator) объект-хранитель (Memento), некоторое время держит его у себя, а затем возвращает объекту-хозяину.
Рекомендуемой литературы к данному уроку не предусмотрено
комментарии и обсуждения