Command 模式在实现的实现和思想都很简单,其关键就是将一个请求封装到一个类中(Command), 再提供处理对象(Receiver),最后 Command 命令由 Invoker 激活
实现调用操作的对象(Command)和操作的具体实现者(Recevier)之间的解耦。也可以理解为命令和执行命令的解耦
Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,“行为请求者”与“行为实现者”通常是呈现一种“紧耦合”的问题。如下图所示
结构图
Command Pattern,另外, 我们可以将请求接收者的处理抽象出来作为参数传给Command 对象, 实际也就是回调的机制(Callback) 来实现这一点,也就是说将处理操作方法地址(在对象内部)通过参数传递给Command 对象, Command 对象在适当的时候(Invoke 激活的时候) 再调用该函数。 这里就要用到C++中的类成员函数指针的概念, 为了方便学习, 这里给出一个简单的实现源代码供参考:
class Reciever
{
public:
Reciever();
~Reciever();
void Action(){
std::cout<<"Reciever action......."<
}
protected:
private:
};
template class SimpleCommand:public Command
{
public:
typedef void (Reciever::* Action)();
SimpleCommand(Reciever* rev,Action act)
{
_rev = rev;
_act = act;
}
virtual void Excute()
{
(_rev->* _act)();
}
~SimpleCommand()
{
delete _rev;
}
protected:
private:
Reciever* _rev;
Action _act;
};
网友评论