首页 > 代码库 > 命令模式
命令模式
1,命令模式是将一类对象的功能(行为,功能)抽象成一个命令对象,客户端在使用的时候,只与该命令对象打交道,而不用与对象打交道,分离命令的请求者和命令的执行者,降低了耦合性,可以使用不同的请求对客户进行参数化提高了程序设计的灵活性。
2,例子,饭馆吃饭,有吃羊肉串的,有吃烤鸡翅的,然后服务员不管做,而仅仅是告诉厨师,然后由出事去做就可以了
3,代码
// 命令模式.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <list> using namespace std; //接受者执行命令的类(厨师) class Cooker{ public: void bakeMutton(){ cout << "烤羊肉串" << endl; } void bakeChickenWing(){ cout << "烤鸡翅" << endl; } }; //命令 class Command{ protected: Cooker *receiver; public: Command(Cooker * recv) :receiver(recv){} virtual void executeCommand() = 0; }; //命令的传送者 class BakeMuttonCommand :public Command{ public: BakeMuttonCommand(Cooker *recv) :Command(recv){} void executeCommand(){ receiver->bakeMutton(); } }; class BakeChickenWingComand :public Command{ public: BakeChickenWingComand(Cooker *recv) :Command(recv){} void executeCommand(){ receiver->bakeChickenWing(); } }; class Waiter{ private: list<Command *> orders; public: void setOrder(Command *cmd){ orders.push_back(cmd); } void cancelOrder(Command *cmd){ } void notify(){ list<Command *>::iterator iter = orders.begin(); while (iter != orders.end()) { (*iter)->executeCommand(); iter++; } } }; int _tmain(int argc, _TCHAR* argv[]) { Cooker *cker = new Cooker(); Command *cmd1 = new BakeMuttonCommand(cker); Command *cmd2 = new BakeMuttonCommand(cker); Command *bc1 = new BakeChickenWingComand(cker); Waiter *g = new Waiter(); g->setOrder(cmd1); g->setOrder(cmd2); g->setOrder(bc1); g->notify(); cin.get(); return 0; }
4,UML
5,1)命令模式将发出命令的责任和执行命令的责任分割开,降低系统的耦合度
2)每一个命令都需要设计一个具体命令类,使用命令模式会导致某些系统有过多的具体命令类。
命令模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。