命令模式

来源:互联网 发布:淘宝网注册流程图 编辑:程序博客网 时间:2024/05/24 01:49
#include <iostream>#include <vector>using namespace std;class Receiver{public:void execute(){cout << "彳亍向大家问好" << endl;}};class Command{public:Command() {}Command(Receiver* pobjReceiver) : m_pobjReceiver(pobjReceiver) {}void setReciever(Receiver* pobjReceiver){m_pobjReceiver = pobjReceiver;}virtual void execute() = 0;protected:Receiver* m_pobjReceiver;};class ConcreteCommand : public Command{public:ConcreteCommand() {}ConcreteCommand(Receiver* pobjReceiver) : Command(pobjReceiver) {}virtual void execute(){m_pobjReceiver->execute();cout << "时间" << endl;}};class Invoker{public:void addCommand(Command* pobjCommand){if (pobjCommand){m_vecCommand.push_back(pobjCommand);}}void removeCommand(Command* pobjCommand){for (auto it = m_vecCommand.begin(); it != m_vecCommand.end(); ++it){if (*it == pobjCommand){m_vecCommand.erase(it);}}}void execute(){for (auto& it : m_vecCommand){if (it){it->execute();}}}protected:vector<Command*> m_vecCommand;};int main(){Receiver* pobjReceiver = new Receiver();Command* pobjCommand = new ConcreteCommand(pobjReceiver);Invoker* pobjInvoker = new Invoker();pobjInvoker->addCommand(pobjCommand);pobjInvoker->execute();return 0;}

总结:

1.容易设计成命令队列来进行操作

2.可以对命令进行日志记录

3.接收请求方可以拒绝需要拒绝的命令

4.可以实现撤销和重做

5.增加新新命令非常容易

6.请求操作与执行操作分离

0 0
原创粉丝点击