淮南网站优化公司,建立网站英文,百度小说搜索排行榜,中国公共信息服务平台解释说明#xff1a;命令模式#xff08;Command Pattern#xff09;是一种数据驱动的设计模式#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中#xff0c;并传递给调用对象。调用对象寻找可以处理该命令的合适对象#xff0c;并把该命令传给相应的对象…解释说明命令模式Command Pattern是一种数据驱动的设计模式它属于行为型模式。请求以命令的形式包裹在对象中并传递给调用对象。调用对象寻找可以处理该命令的合适对象并把该命令传给相应的对象该对象执行命令。 命令抽象类Command定义命令的接口声明执行的方法。
具体命令ConcreteCommand命令接口实现对象是“虚”的实现通常会持有接收者并调用接收者的功能来完成命令要执行的操作。
实现者/接收者Receiver接收者真正执行命令的对象。任何类都可能成为一个接收者只要它能够实现命令要求实现的相应功能。
调用者/请求者Invoker要求命令对象执行请求通常会持有命令对象可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方也就是说相当于使用命令对象的入口。
command.h
#pragma once
class Command
{
public://每个命令类都必须有一个执行命令的方法virtual void execute() 0;
};
receiver.h
#pragma once
class Receiver
{
public://抽象接收者 定义每个接收者都必须完成的业务virtual ~Receiver() { }virtual void doSomething() 0;
};
concreteCommand.h
#pragma once
#include command.h
#include receiver.h
#include iostream
class ConcreteCommand1 :public Command
{
private:Receiver* m_pReceiver;//哪个Receiver类进行命令处理
public://构造函数传递接收者ConcreteCommand1(Receiver* receiver){m_pReceiver receiver;}//必须实现一个命令void execute(){//业务处理std::cout command1 run std::endl;m_pReceiver-doSomething();}
};
class ConcreteCommand2 : public Command
{
private:Receiver* m_pReceiver;
public:ConcreteCommand2(Receiver* receiver){m_pReceiver receiver;}void execute(){std::cout command2 run std::endl;m_pReceiver-doSomething();}
};
concreteReciver.h
#pragma once
#include receiver.h
#include iostream
class ConcreteReciver1 : public Receiver
{//每个接收者都必须处理一定的业务逻辑
public:void doSomething(){std::cout Reciver1 doing std::endl;}
};
class ConcreteReciver2 : public Receiver
{//每个接收者都必须处理一定的业务逻辑
public:void doSomething(){std::cout Reciver2 doing std::endl;}
};
invoker.h
#pragma once
#include command.h
#include iostream
class Invoker
{
private:Command* m_pCommand;
public://接受命令void setCommand(Command* command){m_pCommand command;std::cout invoker add command std::endl;}//执行命令void action(){m_pCommand-execute();std::cout invoker action command std::endl;}
};
main.cpp
#include concreteCommand.h
#include concreteReciver.h
#include invoker.h
int main()
{//首先声明调用者InvokerInvoker* invoker new Invoker();//定义接收者Receiver* receiver new ConcreteReciver1();Receiver* receiver2 new ConcreteReciver2();//定义一个发送给接收者的命令Command* command new ConcreteCommand1(receiver);Command* command2 new ConcreteCommand2(receiver);Command* command3 new ConcreteCommand1(receiver2);Command* command4 new ConcreteCommand2(receiver2);//把命令交给调用者去执行invoker-setCommand(command);invoker-action();invoker-setCommand(command2);invoker-action();invoker-setCommand(command3);invoker-action();invoker-setCommand(command4);invoker-action();system(pause);return 0;
}