这种设计模式是使用不同类的包裹不同的命令,达到什么样的命令执行什么操作。
有可能进一步利用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; }
执行:
版权声明:笔者靖心脏,景空间地址:http://blog.csdn.net/kenden23/,只有经过作者同意转载。