Главная » Delphi » Delphi 2006 – Шаблон Command (Команда)

0

Шаблон Команда реализует популярную в современном программировании задачу. Он представляет некоторое сообщение в виде объекта, который затем может использоваться заранее неизвестными элементами программы. Такая парадигма широко используется в Delphi. Например, типичные события пользовательского интерфейса (выбор пункта меню, нажатие кнопки, щелчок мышью) в программах обрабатываются заранее не известными способами. Обычно формируется прикладной обработчик события, в который в виде объекта передается информация о событии (рис. 7.15).

В интерфейсе TCommand определен метод Execute, вызываемый при обращении к объекту, причем заранее не известно — к какому.

TCommand = interface procedure Execute; end;

На базе интерфейса TCommand в клиентском приложении создается класс- наследник TConcreteCommand (например, одно из стандартных действий,

Рис. 7.15. Шаблон Команда в Дизайнере модели

выполняемых при обращении к элементам управления, — реакция на нажатие некоторой кнопки).

TConcreteCommand = class(TObject, TCommand) strict private var

FReceiver:TReceiver;

public

procedure Execute;

constructor Create(AReceiver :TReceiver);

end;

Этот класс используется в объекте Получатель (TReceiver), предоставляющем конкретную реализацию действия Execute. В качестве Получателя может выступать, например, некоторая форма, заинтересованная в обработке нажатия на кнопку.

TReceiver = class public

procedure Action;

end;

В методе Action используется информация объекта — экземпляра TConcreteCommand.

Допустим, в прикладной программе мы создали объект im, ответственный за выбор пункта условного меню (не стандартного, а какого-то оригинально запрограммированного в текущем приложении), например Выполнить расчет переменной А. Пусть имеется также главный объект (аналог приложения), выполняющий конкретные действия при выборе того или иного пункта меню.

var im: TConcreteCommand; ap: TReceiver;

ap:= TReceiver.Create;

im:= TConcreteCommand.Create(ap);

Ключевым здесь является способ реализации метода Execute. Если метод Action прямо выполняет требуемые от него действия:

procedure TReceiver.Action; begin

// выполнение прикладных действий – расчет переменной А end;

то объект Команда может до или после этого расчета выполнить ряд дополнительных проверок. Например, он может проверить права пользователя и выполнить обработку результата с учетом текущего контекста. Делать это особенно удобно потому, что Команда представляет собой полноценный объект, никак не привязанный к Получателю.

procedure TConcreteCommand.Execute; begin

// действия до ..

FReceiver.Action(); // действия после .. end;

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

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

По теме:

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