目录
基本概念
代码与实例
基本概念
命令模式(Command),将一个请求封装为对象,从而使你看用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。
命令模式的作用:
1. 能比较容易的设计一个命令队列;
2. 在需要的情况下,可以比较容易地将命令记入日志;
3. 允许接收请求的一方决定是否要否决请求;
4. 可以容易的实现对请求的撤销和重做;
5. 由于加进的新的具体命令类不影响其他类,因此增加新的具体命令类很容易。
UML图如下(此图来源于大话设计模式)
代码与实例
程序运行截图如下:
源码如下:
Head.h
#ifndef HEAD_H
#define HEAD_H#include <iostream>
#include <string>
using namespace std;//Receiver类,知道如何实施与执行一个与请求相关的操作,任何类都可能作文一个接收者
class Receiver{public:void action();~Receiver();
};//Command类,用来声明执行操作的接口
class Command{public:virtual void execute();Command(Receiver *receiver);virtual ~Command();protected:Command();Command(Command &c);Command &operator = (Command &c);Receiver *m_receiver;
};//ConcreteCommand类,将一个接收者对象绑定于一个动作,调用接收这相应的操作,以实现Execute
class ConcreteCommand: public Command{public:ConcreteCommand(Receiver *receiver);void execute();~ConcreteCommand();
};//Invoker类,要求该命令执行这个请求
class Invoker{public:void setCommand(Command *command);void executeCommand();private:Command *m_command;
};#endif
Head.cpp
#include "Head.h"void Command::execute()
{}Command::~Command()
{cout << "Command::~Command()" << endl;
}Command::Command()
{}Command::Command(Command &c)
{}Command::Command(Receiver *receiver)
{m_receiver = receiver;
}Command & Command::operator=(Command &c)
{return Command();
}void Receiver::action()
{cout << "执行请求!" << endl;
}Receiver::~Receiver()
{cout << "Receiver::~Receiver()" << endl;
}ConcreteCommand::ConcreteCommand(Receiver *receiver) : Command(receiver)
{}void ConcreteCommand::execute()
{m_receiver->action();
}ConcreteCommand::~ConcreteCommand()
{cout << "ConcreteCommand::~ConcreteCommand()" << endl;
}void Invoker::setCommand(Command *command)
{m_command = command;
}void Invoker::executeCommand()
{m_command->execute();
}
main.cpp
#include "Head.h"int main(int *argc, int *argv){Receiver *r = new Receiver;Command *c = new ConcreteCommand(r);Invoker *i = new Invoker;i->setCommand(c);i->executeCommand();delete r;delete c;delete i;getchar();return 0;
}