标签:
本设计模式就是利用不同的类包起不同的命令,达到使用什么命令就实现什么操作。
也可以进一步利用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;
}
};具体要如何实现怎么使用这些类(命令),那么可以自己定义,如可以使用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;
}
标签:
原文地址:http://blog.csdn.net/kenden23/article/details/38166735