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