-
Notifications
You must be signed in to change notification settings - Fork 3
Momento
Pandas edited this page Jun 19, 2017
·
1 revision
Не нарушая инкапсуляции, фиксирует и выносит за пределы объекта его внутреннее состояние так, чтобы позднее можно было восстановить в нем объект.
- Используйте паттерн хранитель, когда:
- Необходимо сохранить мгновенный снимок состояния объекта (или его части) чтобы впоследствии объект можно было восстановить в том же состоянии;
- Прямое получение этого состояния раскрывает детали реализации и нарушает инкапсуляцию объекта.
- Memento - хранитель: сохраняет внутреннее состояние объекта Originator. Объем сохраняемой информации может быть различным и определяется потребностями хозяина; запрещает доступ всем другим объектам, кроме хозяина.
- Originator - хозяин: создает хранитель, содержащего снимок текущего внутреннего состояния; использует хранитель для восстановления внутреннего состояния;
- Caretaker - посыльный: отвечает за сохранение хранителя; не производит никаких операций над хранителем и не исследует его внутреннее содержимое.
- посыльный запрашивает хранитель у хозяина, некоторое время держит его у себя, а затем возвращает хозяину, как видно на представленной диаграмме взаимодействий.Иногда этого не происходит, так как последнему не нужно восстанавливать прежнее состояние;
- хранители пассивны. Только хозяин, создавший хранитель, имеет доступ к информации о состоянии.
Характерные особенности паттерна хранитель:
- Сохранение границ инкапсуляции.
- Упрощение структуры хозяина.
- Значительные издержки при использовании хранителей. С хранителями могут быть связаны заметные издержки, если хозяин должен копировать большой объем информации для занесения в память хранителя или если клиенты создают и возвращают хранителей достаточно часто.
- Скрытая плата за содержание хранителя. Посыльный отвечает за удаление хранителя, однако не располагает информацией о том, какой объем информации о состоянии скрыт в нем.