Всем привет, решил изучить паттерн Command, правильно ли я понимаю, он оборачивает сами команды в объекты, что добавляет гибкости программе?
Сам Invoker здесь самый главный, который все и кастует?) То есть у него должны быть методы для выполнения каких-либо команд или мы сами задаем команду, которую должен исполнить Invoker?
(Как я понял, паттерн должен выглядеть так, подскажите, правильно ли я понял?)
class Command {
public:
virtual ~Command() {};
virtual void Execute() = 0;
};
class Receiver {
public:
void Command1() {};
void Command2() {};
};
class ConcreteCommand1 : public Command {
public:
ConcreteCommand1(Receiver* other_purpose): purpose(other_purpose) {};
void Execute() {
purpose->Command1();
}
private:
Receiver* purpose;
};
class ConcreteCommand2 : public Command {
public:
ConcreteCommand2(Receiver* other_purpose): purpose(other_purpose) {};
void Execute() {
purpose->Command2();
}
private:
Receiver* purpose;
};
class Invoker {
public:
void SetCommand(Command* other_cmd) {
this->cmd = other_cmd;
}
void ExecuteCommand() {
this->cmd->Execute();
}
private:
Command* cmd;
};