目的:将命令设计成类的形式,并可以组织成队列
优点:
- 在需要的情况下,可以比较容易地将命令记入日志
- 可以容易的实现对请求的撤销和重做
- 由于新的具体命令类不影响其他的命令类,因此增加新的具体命令类很容易
例子:
class Receiver
{
public:
void action()
{
cout << "do action." << endl;
}
};
class Icommand
{
public:
virtual void excute() = 0;
};
class CommondFirst: public Icommand
{
Receiver* receive;
public:
CommondFirst(Receiver* receive)
{
this->receive = receive;
}
void excute()
{
cout << "CommondFirst: " << endl;
receive->action();
}
};
class CommondSecond: public Icommand
{
Receiver* receive;
public:
CommondSecond(Receiver* receive)
{
this->receive = receive;
}
void excute()
{
cout << "CommondSecond: " << endl;
receive->action();
}
};
class Invoker
{
vector<Icommand*> v;
public:
void addCommand(Icommand* c)
{
v.push_back(c);
}
void clear()
{
v.clear();
}
void Notify()
{
for(vector<Icommand*>::iterator it=v.begin(); it!=v.end(); ++it)
{
(*it)->excute();
}
}
};
int main()
{
Receiver* r = new Receiver();
CommondFirst* cf = new CommondFirst(r);
CommondSecond* cs = new CommondSecond(r);
Invoker* invoker = new Invoker();
invoker->addCommand(cf);
invoker->addCommand(cs);
invoker->Notify();
return 0;
}