本文共 1398 字,大约阅读时间需要 4 分钟。
目录
将一个请求封装成为一个对象,因而使得我们可以用不同的请求,来参数化其它的对象。将请求插入队列或记录请求日志,以及支持可撤销的操作。
Command:声明执行操作的接口。
ConcreteCommand:将一个接收者对象绑定于一个动作;调用接收者相应的操作,以实现Execute。
Invoker:要求该命令执行这个请求。
Receiver:知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。
Client:创建一个具体命令对象并设定它的接收者。
#includeusing namespace std;//命令接口class Command{public: virtual void execute() = 0;};//接收者class AutoDoor{public: void open() { cout << "AutoDoor is opening" << endl; } void close() { cout << "AutoDoor is closing" << endl; }};//执行开门的命令类class OpenCommand : public Command{public: explicit OpenCommand(AutoDoor *door) : _door(door) {} void execute() { _door->open(); }private: AutoDoor *_door;};//执行关门的命令类class CloseCommand : public Command{public: explicit CloseCommand(AutoDoor *door) : _door(door) {} void execute() { _door->close(); }private: AutoDoor *_door;};//保存具体的命令对象class RemoteControl{public: void setCommand(Command *cmd) { _cmd = cmd; } void buttonPressed() { _cmd->execute(); }private: Command *_cmd;};//客户int main(){ //接收者 AutoDoor *door = new AutoDoor; // 具体的命令对象 OpenCommand *opencmd = new OpenCommand(door); CloseCommand *closecmd = new CloseCommand(door); //触发者对象 RemoteControl *ctrl = new RemoteControl; ctrl->setCommand(opencmd); ctrl->buttonPressed(); ctrl->setCommand(closecmd); ctrl->buttonPressed(); delete door, opencmd, closecmd, ctrl; return 0;}
运行结果为:
AutoDoor is opening AutoDoor is closing