标签:设计模式
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)每一个命令都需要设计一个具体命令类,使用命令模式会导致某些系统有过多的具体命令类。
标签:设计模式
原文地址:http://blog.csdn.net/sun734274006/article/details/42175519