命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
下面是命令模式的UML图:
下面是C++实现的代码:
/*
* Copyright (c) 2017 initm.com All rights reserved.
* 作者: Stupid
* 描述: 命令模式
* 完成时间: 2017-11-21 23:08
*/
#include <QCoreApplication>
#include <iostream>
#include <cstdlib>
class Receiver
{
public:
void Action()
{
std::cout << "执行请求!" << std::endl;
}
};
class Command
{
protected:
Receiver* receiver;
public:
Command(Receiver* receiver){
this->receiver = receiver;
}
virtual void Execute() = 0;
};
class ConcreteCommand: public Command
{
public:
ConcreteCommand(Receiver* receiver): Command(receiver){}
void Execute()override final{
receiver->Action();
}
};
class Invoker
{
private:
Command* command;
public:
void SetCommand(Command* command){
this->command = command;
}
void ExecuteCommand(){
command->Execute();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
system("chcp 65001");
Receiver* receiver = new Receiver;
Command* command = new ConcreteCommand(receiver);
Invoker* invoker = new Invoker;
invoker->SetCommand(command);
invoker->ExecuteCommand();
return a.exec();
}