设计模式(18) - Command命令模式

来源:互联网 发布:淘宝怎么打印发货清单 编辑:程序博客网 时间:2024/06/05 12:08

1. 意图

  将一个请求封装成为一个对象,因而使得我们可以,用不同的请求来参数化其它的对象,将请求插入队列或记录请求日志,以及支持可撤销的操作。

2. UML类图

  

3. 代码实现  

#include<iostream>using 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

0 0
原创粉丝点击