命令模式:将一个请求封装成一个对象,从而允许用不同的请求参数化客户,对请求进行排序或记录日志,并且支持撤销操作。
UML图:
主要包括:
- Command:声明了一个操作的接口
- ConcreteCommand:绑定了一个Receiver和一个行为,通过相关联的Receiver对象实现了了execute方法。
- Client:创建一个ConcreteCommand对象并且设置了它的Receiver。
- invoker:要求命令执行请求。
- Receiver:知道如何实施与执行请求相关的操作。
命令模式的核心就是从业务模型中寻找到对应的Command,ConcreteCommand,invoker,Receiver。它将行为的实现者(Receiver)和行为的请求者(invoker)分离开来,通过增加一层抽象类Command实现了面向接口编程。基本的C++代码如下:
#include <iostream>
using namespace std;
class Receiver
{
public:
void action()
{
cout<<"real action1"<<endl;
}
};
class Command
{
public:
Command(Receiver* r)
{
receiver=r;
}
virtual void execute()=0;
protected:
Receiver * receiver;
};
class ConcreteCommand:public Command
{
public:
ConcreteCommand(Receiver * r):Command(r)
{
}
void execute()
{
receiver->action();
}
};
class Invoker
{
public:
void setCommand(Command * c)
{
command=c;
}
void execute()
{
command->execute();
}
private:
Command* command;
};
int main()
{
cout<<"命令模式基本代码"<<endl;
Receiver * r=new Receiver();
Command * c=new ConcreteCommand(r);
Invoker * invoker=new Invoker();
invoker->setCommand(c);
invoker->execute();
delete r;
delete c;
delete invoker;
return 0;
}
执行输出:
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 14:46:39