佛山网站建设公司哪家便宜,太原制作手机网站,全国企业信息公开系统,东莞凤岗网站建设制作命令模式#xff1a;将一个请求封装为一个对象#xff0c;从而使你可用不同的请求对客户进行参数化#xff1b;对请求排队或记录请求日志#xff0c;以及支持可撤销的操作。
命令模式的好处#xff1a; 1、它能较容易地设计一个命令队列#xff1b; 2、在需要的情况下将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化对请求排队或记录请求日志以及支持可撤销的操作。
命令模式的好处 1、它能较容易地设计一个命令队列 2、在需要的情况下可以较容易地将命令记入日志 3、允许接收请求的一方决定是否要否决请求 4、可以容易地实现对请求的撤销和重做 5、由于加进新的具体命令类不影响其他的类因此增加新的具体命令类很容易 6、命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。 Invoker.h
#ifndef INVOKER_H
#define INVOKER_H#include Command.h
#include listusing namespace std;class Invoker {
private:listCommand * commands;
public:void setCommand(Command *c) {commands.push_back(c);}void Notify() {for (auto c commands.begin(); c ! commands.end(); c) {(*c)-Excute();}}
};#endif //INVOKER_H
Command.h
#ifndef COMMAND_H
#define COMMAND_H#include Reciever.hclass Command {
public:virtual void Excute() 0;virtual void setReceiver(Receiver* r) 0;virtual ~Command(){};
};class ConcreteCommand : public Command {
private:Receiver* receiver;
public:void setReceiver(Receiver* r) {receiver r;}void Excute() {receiver-Action();}
};#endif //COMMAND_HReceiver.h
#ifndef RECIEVER_H
#define RECIEVER_H#include iostreamclass Receiver {
public:void Action() {std::cout Receiver std::endl;}
};#endif //RECIEVER_Hmain.cpp
#include iostream
#include Command.h
#include Invoker.husing namespace std;int main() {Command* c new ConcreteCommand();Receiver* r new Receiver();c-setReceiver(r);Invoker i;i.setCommand(c);i.Notify(); // Receiverreturn 0;
}