Команда
Command
Назначение
Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для обработки соответствующих запросов, ставить запросы в очередь или протоколировать их, а также поддерживать отмену операций.
Результаты
1. Команда разрывает связь между объектом, инициирующим операцию, и объектом, имеющим информацию о том, как ее выполнить.
2. Команды – это самые настоящие объекты. Допускается манипулировать ими и расширять их точно так же, как в случае с любыми другими объектами.
3. Из простых команд можно собирать составные, например, макрокоманды, при реализации которых можно использовать паттерн компоновщик.
4. Добавлять новые команды легко, поскольку никакие существующие классы изменять не нужно.
Реализация
//
class Command {
public:
virtual void Execute()=0;
};
//
//
class Receiver {
public:
void Action();
};
//
class Command1 : public Command {
Receiver *r;
public:
Command1(Receiver *r):r(r) {}
void Execute() { r->Action(); }
};
//
//
class Invoker {
Command *cmd;
public:
void AddCommand(Command *c) { cmd=c; }
void Action() { cmd->execute(); }
};
//
Invoker inv;
Receiver rec;
inv.AddCommand(new Command1(&rec));
...
inv.Action();