行为模式5-命令模式
命令模式(Command)
意图
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;地请求排队或记录请求日志,以及支持可撤销的操作。
问题思考
Office的打开,保存,关闭。
适用性
- 在不同的时刻指定、排列和执行请求。
- 支持取消操作
- 支持修改日志
- 用构建在原语1操作上的高层操作构造一个系统。例如SQL事务。
效果
- Command模式调用操作的对象与指导如何实现该操作的对象解耦。
- Command是头等的对象。它们可像其他的对象一样被操纵和扩展。
- 可以将多个命令组合成一个符合命令。
- 增加新的Command很容易,因为这无需改变已有的类。
类图
实现
class Command {
public:
virtual void Execute() = 0;
};
class ConcreteCommand : public Command {
public:
explicit ConcreteCommand(Receiver *receiver) {
mReceiver = receiver;
}
void Execute() override {
mReceiver->Action();
}
private:
Receiver *mReceiver = nullptr;
};
class Receiver {
public:
void Action() {
std::cout << "Receiver in action" << std::endl;
}
};
1.原语:是由若干条指令组成的,用于完成一定功能的一个过程。