定义: 命令模式将“请求”封装成对象,以便试用不同的请求,队列或者日志来参数化其他对象。命令模式也可支持可撤销的操作。 UML图: 程序实现: /************************************************************************/ /* Command.h */ /************************************************************************/ /** * @file Command.h * @brief Command模式的实现代码 * @author wlq_729@163.com * http://blog.csdn.net/rabbit729 * @version 1.0 * @date 2009-02-22 */ #ifndef COMMAND_H_ #define COMMAND_H_ #include <iostream> #include <vector> #include <string> using namespace std; class Command { public: virtual string Execute() = 0; virtual string GetType() = 0; }; class CeillingFan { public: CeillingFan(string location); string High(); string Medium(); string Low(); string Off(); int GetSpeed(); protected: private: string location; int level; public: static const int HIGH = 2; static const int MEDIUM = 1; static const int LOW = 0; }; class CeillingFanOffCommand : public Command { public: CeillingFanOffCommand(CeillingFan* ceilingFan); string Execute(); string GetType(); private: CeillingFan* ceilingFan; }; class CeillingFanOnCommand : public Command { public: CeillingFanOnCommand(CeillingFan* ceilingFan); string Execute(); string GetType(); private: CeillingFan* ceilingFan; }; class GarageDoor { public: GarageDoor(string location); string Up(); string Down(); string Stop(); string LightOn(); string LightOff(); private: string location; }; class GarageDoorDownCommand : public Command { public: GarageDoorDownCommand(GarageDoor* garageDoor); string Execute(); string GetType(); private: GarageDoor* garageDoor; }; class GarageDoorUpCommand : public Command { public: GarageDoorUpCommand(GarageDoor* garageDoor); string Execute(); string GetType(); private: GarageDoor* garageDoor; }; class Hottub { public: Hottub(); bool On(); bool Off(); string BubblesOn(); string BubblesOff(); string JetsOn(); string JetsOff(); int SetTemperature(int temperature); string Heat(); string Cool(); private: bool on; int temperature; }; class HottubOffCommand : public Command { public: HottubOffCommand(Hottub* hottub); string Execute(); string GetType(); private: Hottub* hottub; }; class HottubOnCommand : public Command { private: Hottub* hottub; public: HottubOnCommand(Hottub* hottub); string Execute(); string GetType(); }; class Light { public: Light(string location); string On(); string Off(); private: string location; }; class LightOffCommand : public Command { public: LightOffCommand(Light* light); string Execute(); string GetType(); private: Light* light; }; class LightOnCommand : public Command { public: LightOnCommand(Light* light); string Execute(); string GetType(); private: Light* light; }; class LivingroomLightOffCommand : public Command { public: LivingroomLightOffCommand(Light* light); string Execute(); string GetType(); private: Light* light; }; class LivingroomLightOnCommand : public Command { public: LivingroomLightOnCommand(Light* light); string Execute(); string GetType();