您的位置:首页 > 其它

Design Pattern Command 命令设计模式

2015-08-24 10:07 731 查看
这种设计模式是使用不同类的包裹不同的命令,达到什么样的命令执行什么操作。

有可能进一步利用map您最喜欢的对接命令字。

正在运行的类实际上已经包含了操作的所有需求,例如:

class SuperMaker
{
public:
string makeCar()
{
return "Car";
}
string makePlane()
{
return "Plane";
}
};


这里有两个命令。以下要做的就是使用不同的类把须要的命令包括起来。

class Command
{
protected:
SuperMaker *sm;
public:
virtual void exeCmd() = 0;
};

class MakeCarCmd : public Command
{
public:
MakeCarCmd(SuperMaker *s)
{
sm = s;
}
void exeCmd()
{
cout<<sm->makeCar()<<std::endl;
}
};

class MakePlaneCmd : public Command
{
public:
MakePlaneCmd(SuperMaker *s)
{
sm = s;
}

void exeCmd()
{
cout<<sm->makePlane()<<std::endl;
}
};


这里的MakeCarCmd和MakePlaneCmd这两个类分别实现不同的命令。使用不同的类就能实现不同的操作。

详细要怎样实现怎么使用这些类(命令)。那么能够自定义。如能够使用map和有意义的字符串相应起来。也能够使用一个类包这些命令再次包括起来等操作。

所有代码:

#include <iostream>
#include <string>
using std::string;
using std::cout;

class SuperMaker { public: string makeCar() { return "Car"; } string makePlane() { return "Plane"; } };

class Command { protected: SuperMaker *sm; public: virtual void exeCmd() = 0; }; class MakeCarCmd : public Command { public: MakeCarCmd(SuperMaker *s) { sm = s; } void exeCmd() { cout<<sm->makeCar()<<std::endl; } }; class MakePlaneCmd : public Command { public: MakePlaneCmd(SuperMaker *s) { sm = s; } void exeCmd() { cout<<sm->makePlane()<<std::endl; } };

int main()
{
SuperMaker suMa;

MakeCarCmd mcc(&suMa);
Command *cmdCar = &mcc;
MakePlaneCmd mpc(&suMa);
Command *cmdPlane = &mpc;

cmdCar->exeCmd();
cmdPlane->exeCmd();
return 0;
}


执行:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: