C++中的命令模式(Command Pattern)是一种行为设计模式,它允许你将一个请求封装为一个对象,从而使你可以使用不同的请求、队列或日志请求,并支持可撤销的操作。命令模式通常包括以下几个角色:
下面是一个简单的C++命令模式的实现示例:
#include <iostream>
#include <vector>
// 命令接口
class Command {
public:
virtual ~Command() {}
virtual void execute() = 0;
};
// 接收者
class Light {
public:
void turnOn() {
std::cout << "Light turned on." << std::endl;
}
void turnOff() {
std::cout << "Light turned off." << std::endl;
}
};
// 具体命令 - 打开灯
class TurnOnCommand : public Command {
private:
Light* light;
public:
TurnOnCommand(Light* light) : light(light) {}
void execute() override {
light->turnOn();
}
};
// 具体命令 - 关闭灯
class TurnOffCommand : public Command {
private:
Light* light;
public:
TurnOffCommand(Light* light) : light(light) {}
void execute() override {
light->turnOff();
}
};
// 调用者
class RemoteControl {
private:
std::vector<Command*> commands;
public:
void addCommand(Command* command) {
commands.push_back(command);
}
void executeCommands() {
for (auto& command : commands) {
command->execute();
}
}
};
// 客户端
int main() {
Light light;
TurnOnCommand turnOn(&light);
TurnOffCommand turnOff(&light);
RemoteControl remoteControl;
remoteControl.addCommand(&turnOn);
remoteControl.addCommand(&turnOff);
remoteControl.executeCommands();
return 0;
}
在这个示例中,我们创建了一个简单的灯(Light)类,它有两个方法:打开(turnOn)和关闭(turnOff)。然后我们创建了两个具体命令类:TurnOnCommand 和 TurnOffCommand,它们分别实现了命令接口(Command),并在执行方法中调用了 Light 类的相应方法。RemoteControl 类作为调用者,它接收并存储命令对象,然后遍历执行这些命令。在客户端代码中,我们创建了一个 Light 对象和两个具体命令对象,并将它们添加到 RemoteControl 对象中,最后执行这些命令。