Подробнее на 👉 refactoring.guru
#include <iostream>
#include <vector>
// Интерфейс команды
class Command {
public:
virtual void execute() = 0;
};
// Конкретная команда 1
class ConcreteCommand1 : public Command {
private:
std::string action;
public:
ConcreteCommand1(const std::string& action) : action(action) {}
void execute() override {
std::cout << "Выполняется команда 1: " << action << std::endl;
// Здесь можно добавить логику выполнения команды 1
}
};
// Конкретная команда 2
class ConcreteCommand2 : public Command {
private:
std::string action;
public:
ConcreteCommand2(const std::string& action) : action(action) {}
void execute() override {
std::cout << "Выполняется команда 2: " << action << std::endl;
// Здесь можно добавить логику выполнения команды 2
}
};
// Инициатор
class Invoker {
private:
std::vector<Command*> commands;
public:
void addCommand(Command* command) { commands.push_back(command); }
void executeCommands() {
for (Command* command : commands) {
command->execute();
}
}
};
int main() {
Invoker invoker;
// Создание команд и добавление их в инициатор
Command* command1 = new ConcreteCommand1("Построить кузов");
Command* command2 = new ConcreteCommand2("Установить двигатель");
invoker.addCommand(command1);
invoker.addCommand(command2);
// Выполнение команд
invoker.executeCommands();
// Освобождение ресурсов
delete command1;
delete command2;
return 0;
}
Будет напечатано:
Выполняется команда 1: Построить кузов Выполняется команда 2: Установить двигатель
abstract class Command {
void execute();
}
class ConcreteCommand1 implements Command {
final String action;
ConcreteCommand1(this.action);
void execute() {
print('Выполняется команда 1: $action');
// Здесь можно добавить логику выполнения команды 1
}
}
class ConcreteCommand2 implements Command {
final String action;
ConcreteCommand2(this.action);
void execute() {
print('Выполняется команда 2: $action');
// Здесь можно добавить логику выполнения команды 2
}
}
class Invoker {
final List<Command> commands = [];
void addCommand(Command command) {
commands.add(command);
}
void executeCommands() {
for (Command command in commands) {
command.execute();
}
}
}
void main() {
var invoker = Invoker();
// Создание команд и добавление их в инициатор
var command1 = ConcreteCommand1('Построить кузов');
var command2 = ConcreteCommand2('Установить двигатель');
invoker.addCommand(command1);
invoker.addCommand(command2);
// Выполнение команд
invoker.executeCommands();
}
Будет напечатано:
Выполняется команда 1: Построить кузов Выполняется команда 2: Установить двигатель