Главная » Delphi » Delphi 2006 – Шаблон Memento (Хранитель)

0

Хранитель полезен в случаях, когда работа объекта прерывается, например, в исключительных ситуациях или при получении внешнего сигнала, нуждающегося в срочной обработке. Он позволяет не сбрасывать внутреннее состояние объекта, а запомнить его на время отвлечения, чтобы потом продолжить работу с точки прерывания. Подходит Хранитель и для реализации принципов отката внутреннего состояния системы к некоторым промежуточным контрольным точкам. Еще одна из задач Хранителя — скрытие внутренней информации объекта (рис. 7.19).

Рис. 7.19. Шаблон Хранитель в Дизайнере объектов

Для реализации подобных механизмов предложена следующая схема (рис. 7.19). Структура конкретного внутреннего состояния описывается в интерфейсе I state. Хозяин TOriginator обращается (изнутри себя) к Хранителю (интерфейс iMemento).

TOriginator = class public

function CreateMemento: IMemento; procedure SetMemento(AMemento :IMemento);

strict private var

FState:IState;

end;

Структура конкретного класса Хранителя такова.

TConcreteMemento = class (TObj ectIMemento) public

procedure SetStabeiAState, s IState);              ,

function GetState: IState; constructor Create (AState : IState);

strict private var

FStatS: IState;

end;

Получение и сохранение состояний программируется в методах Get state и setstate через внутреннее поле FState.

В клиентской части основное взаимодействие происходит с помощью класса Посыльный (TCaretaker). Он вызывается, когда нужно сохранить текущее состояние объекта — экземпляра класса TOriginator. При этом Посыльный, что важно, ничего не знает о внутреннем содержимом состояния Хранителя.

TCaretaker = class public

constructor Create(AOriginator :TOriginator);

strict private var

FOriginator: TOriginator;

end;

Работает он с Хранителем, например, так: var

Memento: IMemento;

// запрос состояния Хранителя Memento := FOriginator.CreateMemento();

// нужные действия

// возвращение обратно состояния Хранителя FOriginator.SetMemento(Memento)?

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии