Design Pattern Command 命令设计模式

来源:互联网 发布:ubuntu 日志 编辑:程序博客网 时间:2024/06/06 05:08

本设计模式就是利用不同的类包起不同的命令,达到使用什么命令就实现什么操作。

也可以进一步利用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;}

运行:




1 0
原创粉丝点击