Хранитель (Memento) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Диаграмма последовательности)
(Участники)
Строка 16: Строка 16:
  
 
==== Участники====
 
==== Участники====
*
+
* '''Memento''' (Хранитель)
 +
** Сохраняет внутреннее состояние объекта Originator (Хозяин).
 +
** Запрещает доступ к своему содержимому всем объектам кроме Хозяина.
 +
** У Хранителя - два интерфейса - для Хозяина (сохранение и восстановление состояния) и для остальных - только ссылка на Хранителя как единое целое.
 +
* '''Originator''' (Хозяин)
 +
** Создает Хранитель, содержащий снимок текущего состояния
 +
** Использует Хранитель для восстановления состояния
 +
* Caretaker (Посыльный)
 +
** Хранит переменную Хранителя и не производит над ним никаких других операций
  
 
=== Пример ===
 
=== Пример ===

Версия 09:11, 21 июля 2014

К основной странице курса

Назначение

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

Описание

Сохранение внутреннего состояния необходимо для механизмов отката и позволяет пользователю отменить пробную операцию или восстановиться после ошибки.

Для отката необходимо чтобы объект-Хозяин предоставил объект-Хранитель для записи контрольной точки состояния Хозяина. Только Хозяину разрешено записывать и считывать информацию из Хранителя.

Впоследствии Хозяин может восстановить своё состояние по информации, записанной в Хранителе.

Реализация

Диаграмма классов

MementoCommon.png

Участники

  • Memento (Хранитель)
    • Сохраняет внутреннее состояние объекта Originator (Хозяин).
    • Запрещает доступ к своему содержимому всем объектам кроме Хозяина.
    • У Хранителя - два интерфейса - для Хозяина (сохранение и восстановление состояния) и для остальных - только ссылка на Хранителя как единое целое.
  • Originator (Хозяин)
    • Создает Хранитель, содержащий снимок текущего состояния
    • Использует Хранитель для восстановления состояния
  • Caretaker (Посыльный)
    • Хранит переменную Хранителя и не производит над ним никаких других операций

Пример

Достоинства и недостатки

Варианты