#pragma once
#include "stdafx.h"
#include<set>
#include<string>
#include<iostream>
using namespace std;
/*
设计模式-命令模式(Command)
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;
对请求排队或记录请求日志,以及支持可撤销的操作。
*/
class CReceiver {//知道如何实施于执行一个与请求相关的类的操作。
public:
void Action() {
cout << "command" << endl;
}
};
class CCommand {//用来声明执行操作的接口。
protected:
CReceiver *m_pReceiver;
public:
CCommand(CReceiver *pCReceiver) {
m_pReceiver = pCReceiver;
}
virtual void Execute() = 0;
};
class CConcreteCommand :public CCommand {//将一个接受对象绑定于一个接受动作,调用接受者相应的操作,以实现Execute.
public:
CConcreteCommand(CReceiver *pCReceiver) :CCommand(pCReceiver) {
}
void Execute() {
m_pReceiver->Action();
}
};
class Cinvoker {//要求该命令执行这个请求
private:
CCommand *m_pCommand;
public:
void SetCommand(CCommand *pCommand) {
m_pCommand = pCommand;
}
void ExecuteCommand() {
m_pCommand->Execute();
}
};
int main() {
CReceiver *pReceiver = new CReceiver();
CCommand *pCommand = new CConcreteCommand(pReceiver);
Cinvoker *pInvoker = new Cinvoker();
pInvoker->SetCommand(pCommand);
pInvoker->ExecuteCommand();
delete pReceiver;
delete pCommand;
delete pInvoker;
getchar();
return 0;
}