设计模式之命令模式(一)
命令模式就 (c++)
参考 《大话设计模式》 和《设计模式:可复用面向对象软件的基础》
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
我的理解是一位领导者(包含了所有命令)命令某个员工干事情1事情2(方法)
举个例子一个人的工作和休息 类视图如下
代码如下:
person.h
#pragma once
#include <iostream>
using namespace std;
// 人物类
class CPerson
{
public:
void Word()
{
cout << "begin word" << endl;
}
void Rest()
{
cout << "begin rest" << endl;
}
};
Command.h
#pragma once
#include <iostream>
#include "person.h"
using namespace std;
class ICommand
{
public:
virtual void execute() = 0;
};
class CWorkCommand:public ICommand
{
public:
CWorkCommand(CPerson* pPerson);
//////////////////////////ICommand////////////////////////////////////////////////
virtual void execute();
private:
CPerson* m_pPerson;
};
class CRestCommand :public ICommand
{
public:
CRestCommand(CPerson* pPerson);
////////////////////////////ICommand//////////////////////////////////////////////
virtual void execute();
private:
CPerson* m_pPerson;
};
Command.cpp
#include "Command.h"
CWorkCommand::CWorkCommand(CPerson* pPerson)
:m_pPerson(pPerson)
{
}
void CWorkCommand::execute()
{
m_pPerson->Word();
}
CRestCommand::CRestCommand(CPerson* pPerson)
:m_pPerson(pPerson)
{
}
void CRestCommand::execute()
{
m_pPerson->Rest();
}
ControlMgr.h
#include "Command.h"
CWorkCommand::CWorkCommand(CPerson* pPerson)
:m_pPerson(pPerson)
{
}
void CWorkCommand::execute()
{
m_pPerson->Word();
}
CRestCommand::CRestCommand(CPerson* pPerson)
:m_pPerson(pPerson)
{
}
void CRestCommand::execute()
{
m_pPerson->Rest();
}
ControlMgr.cpp
#include "ControlMgr.h"
void CControlMgr::setCommand(ICommand* pCommand)
{
m_pCommand = pCommand;
}
void CControlMgr::execute()
{
m_pCommand->execute();
}
main.cpp
#include "ControlMgr.h"
int main()
{
CControlMgr objMgr;
CPerson objPerson;
ICommand* pWorkCommand = new CWorkCommand(&objPerson);
ICommand* pRestCommand = new CRestCommand(&objPerson);
objMgr.setCommand(pWorkCommand);
objMgr.execute();
objMgr.setCommand(pRestCommand);
objMgr.execute();
system("pause");
return 0;
}