命令模式
命令模式是一种行为设计模式,将请求封装成对象,以便在不同的请求发送者和接收者之间进行参数化传递。通过将请求封装成对象,可以将请求的发送者和接收者解耦,同时支持请求的排队、记录、撤销等操作。
使用场景:
1、当需要将请求发送者和请求接收者解耦,并支持请求的排队、记录、撤销等操作时,可以使用命令模式。
2、当希望支持对请求进行参数化配置时,可以使用命令模式。
3、当需要支持撤销操作或事务回滚时,可以使用命令模式。
优势:
1、解耦请求发送者和接收者,使得请求发送者不需要知道请求的具体处理对象。
2、支持对请求进行排队、记录、撤销等操作。
3、可以方便地扩展新的命令,符合开闭原则。
劣势:
1、可能会导致系统中命令类的数量增多。
2、可能会增加系统的复杂性。
Code
#include <iostream>
#include <string>
// 命令接口
class Command {
public:
virtual void execute() = 0;
};
// 具体命令类
class ConcreteCommand : public Command {
private:
std::string receiver;
public:
ConcreteCommand(const std::string& receiver) : receiver(receiver) {}
void execute() override {
std::cout << "Command executed by " << receiver << std::endl;
}
};
// 命令接收者
class Receiver {
public:
void action() {
std::cout << "Receiver performs action" << std::endl;
}
};
// 命令调用者
class Invoker {
private:
Command* command;
public:
void setCommand(Command* command) {
this->command = command;
}
void executeCommand() {
command->execute();
}
};
int main() {
Receiver receiver;
ConcreteCommand command("ReceiverA");
command.execute();
Invoker invoker;
invoker.setCommand(&command);
invoker.executeCommand();
while (1);
return 0;
}