命令模式
来源:互联网 发布:如何自己做软件 编辑:程序博客网 时间:2024/06/05 15:45
命令模式是一种使用频率非常高的设计模式,它可以将请求发送者与接收者解耦,请求发送者通过命令对象来间接引用请求接收者,使得系统具有更好的灵活性和可扩展性。在基于GUI的软件开发,无论是在电脑桌面应用还是在移动应用中,命令模式都得到了广泛的应用。
1. 主要优点
命令模式的主要优点如下:
(1) 降低系统的耦合度。由于请求者与接收者之间不存在直接引用,因此请求者与接收者之间实现完全解耦,相同的请求者可以对应不同的接收者,同样,相同的接收者也可以供不同的请求者使用,两者之间具有良好的独立性。
(2) 新的命令可以很容易地加入到系统中。由于增加新的具体命令类不会影响到其他类,因此增加新的具体命令类很容易,无须修改原有系统源代码,甚至客户类代码,满足“开闭原则”的要求。
(3) 可以比较容易地设计一个命令队列或宏命令(组合命令)。
(4) 为请求的撤销(Undo)和恢复(Redo)操作提供了一种设计和实现方案。
#include <iostream>#include <vector>using namespace std;class Barbucer{public: void makeMutton(){ cout<<"makeMutton"<<endl; } void makeChickenWing(){ cout<<"makeChickenWing"<<endl; }};class Command{public: Command(Barbucer *b):m_receiver(b){} virtual void executeCmd()=0;protected: Barbucer *m_receiver;};class MakeMuttonCmd:public Command{public: MakeMuttonCmd(Barbucer *bb):Command(bb){} void executeCmd(){ m_receiver->makeMutton(); }};class MakeChickenWingsCmd:public Command{public: MakeChickenWingsCmd(Barbucer*bb):Command(bb){} void executeCmd(){ m_receiver->makeChickenWing(); }};//服务员类class Waiter{public: void addCmd(Command *c){ m_cmdVtr.push_back(c); } void Notify(){ for(vector<Command*>::iterator it=m_cmdVtr.begin(); it!=m_cmdVtr.end();++it) (*it)->executeCmd(); }private: vector<Command*> m_cmdVtr;};int main(){ Barbucer *bb=new Barbucer; MakeMuttonCmd *mmCmd=new MakeMuttonCmd(bb); MakeChickenWingsCmd *mcwCmd=new MakeChickenWingsCmd(bb); Waiter *wtr=new Waiter; wtr->addCmd(mmCmd); wtr->addCmd(mcwCmd); wtr->Notify(); delete bb; delete mmCmd; delete mcwCmd; delete wtr; return 0;}
阅读全文
0 0