Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Design Patterns via C#.pdf
Скачиваний:
154
Добавлен:
17.03.2016
Размер:
13.25 Mб
Скачать

226

Участники

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

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

Originator - Хозяин:

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

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

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

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

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

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

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

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

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

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

Мотивация

227

Пример, дающий возможность представить потребность в использовании паттерна и увидеть способ применения паттерна.

Применимость паттерна

Паттерн Memento рекомендуется использовать, когда:

Необходимо сохранить состояние объекта-хозяина (или только часть состояния), чтобы позднее хозяина можно было восстановить в исходном состоянии.

Реализация

Полезные приемы реализации паттерна Memento:

Наличие «узкого» и «широкого» интерфейсов.

Объект-хранитель должен запрещать кому бы то ни было, кроме объекта-хозяина получать доступ к хранимому состоянию. Объекту-посыльному класса Caretaker может быть доступен только «узкий» интерфейс хранителя, а объекту-хозяину может быть доступен «широкий» интерфейс, через который объект-хозяин может получить доступ к хранящимся данным.

См. Пример к главе: \018_Memento\003_NarrowAndWideInterfaces

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]