Хранитель (Memento)

Метафора

 

Представьте себе гардероб и гардеробщицу, когда вы сдаете свою одежду в гардероб, гардеробщица реализует паттерн «хранитель», запоминая ваше состояние — «одежду», когда вам потребуется восстановить состояние, вы просто обращаетесь к гардеробщице за одеждой и восстанавливаете свое состояние до прихода в гардероб.

 

Назначение

 

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

Используется:

  • В приложениях, где необходимо вести историю состояния объекта и при необходимости его восстанавливать (undo/redo операции в графических или текстовых редакторах); Обычно совместно с паттерном команда;
  • В случае необходимости получения состояния объекта, не нарушая при этом его инкапсуляцию.

 

Диаграмма

 

Хранитель

Хранитель

 

Объекты:

  • Originator – создатель, объект позволяющий зафиксировать своё состояние, представляемое в виде объекта Memento (это Вы из метафоры);
  • Memento – состояние объекта Originator (Ваши вещи);
  • Caretaker – хранитель состояния (Гардеробщица), который не должен изменять или читать состояние, а быть только его хранителем. Определение состояния и его чтение это исключительно обязанность создателя (Originator).

Состояние для примера представлено атрибутом типа String.

 

Пример

 

Благодаря концепции друзей, доступ к чтению Memento (вызов приватных методов) имеет только Originator.