Хранитель (Memento) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Участники) |
Admin (обсуждение | вклад) (→Достоинства и недостатки) |
||
Строка 29: | Строка 29: | ||
=== Достоинства и недостатки === | === Достоинства и недостатки === | ||
− | * | + | * Позволяет избежать раскрытия информации о внутреннем устройстве Хозяина |
+ | * Издержки | ||
=== Варианты === | === Варианты === | ||
* | * |
Версия 09:13, 21 июля 2014
Назначение
Хранитель - это объект, в котором сохраняется состояние другого объекта - хозяина хранителя. Это необходимо для того чтобы хозяин мог записать в хранитель некоторую контрольную точку - своё текущее состояние, а потом вернуться к этому состоянию.
Описание
Сохранение внутреннего состояния необходимо для механизмов отката и позволяет пользователю отменить пробную операцию или восстановиться после ошибки.
Для отката необходимо чтобы объект-Хозяин предоставил объект-Хранитель для записи контрольной точки состояния Хозяина. Только Хозяину разрешено записывать и считывать информацию из Хранителя.
Впоследствии Хозяин может восстановить своё состояние по информации, записанной в Хранителе.
Реализация
Диаграмма классов
Участники
- Memento (Хранитель)
- Сохраняет внутреннее состояние объекта Originator (Хозяин).
- Запрещает доступ к своему содержимому всем объектам кроме Хозяина.
- У Хранителя - два интерфейса - для Хозяина (сохранение и восстановление состояния) и для остальных - только ссылка на Хранителя как единое целое.
- Originator (Хозяин)
- Создает Хранитель, содержащий снимок текущего состояния
- Использует Хранитель для восстановления состояния
- Caretaker (Посыльный)
- Хранит переменную Хранителя и не производит над ним никаких других операций
Пример
Достоинства и недостатки
- Позволяет избежать раскрытия информации о внутреннем устройстве Хозяина
- Издержки