目的:将命令设计成类的形式,并可以组织成队列
优点:
- 在需要的情况下,可以比较容易地将命令记入日志
- 可以容易的实现对请求的撤销和重做
- 由于新的具体命令类不影响其他的命令类,因此增加新的具体命令类很容易
例子:
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; }