本设计模式就是利用不同的类包起不同的命令,达到使用什么命令就实现什么操作。
也可以进一步利用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;
}
运行: