标题:C++中的设计模式:命令模式
简介: 命令模式是一种常用的设计模式,它将一个请求封装成一个对象,使得可以用不同的请求对客户进行参数化。
正文:
1. 命令模式的定义
命令模式包括四个角色:Command(命令)、Receiver(接收者)、Invoker(调用者)和Client(客户端)。命令对象负责封装请求,接收者执行具体的操作,调用者发起请求,客户端创建并配置命令对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
   | class Receiver { public:     void action() {         std::cout << "Receiver is performing action.\n";     } };
  class Command { protected:     Receiver* receiver;
  public:     Command(Receiver* rec) : receiver(rec) {}
      virtual void execute() = 0; };
  class ConcreteCommand : public Command { public:     ConcreteCommand(Receiver* rec) : Command(rec) {}
      void execute() override {         receiver->action();     } };
  class Invoker { private:     Command* command;
  public:     void setCommand(Command* cmd) {         command = cmd;     }
      void executeCommand() {         command->execute();     } };
 
  | 
2. 具体实现
1 2 3 4 5 6 7 8 9 10
   | int main() {     Receiver receiver;     ConcreteCommand command(&receiver);     Invoker invoker;
      invoker.setCommand(&command);     invoker.executeCommand();
      return 0; }
 
  | 
3. 命令模式的应用
命令模式常用于以下场景:
- 需要将请求的发送者和接收者解耦。
 - 需要对请求进行排队、记录请求日志等操作。
 
4. 命令模式与策略模式的比较
命令模式与策略模式有些相似,它们都将算法封装成对象,可以在运行时动态切换。但它们的关注点不同,策略模式关注于整体算法的替换,而命令模式关注于请求的发送者和接收者的解耦。
结论:
命令模式是一种常用的设计模式,它将一个请求封装成一个对象,使得可以用不同的请求对客户进行参数化。在C++中,可以通过定义命令、接收者和调用者来实现命令模式。命令模式常用于需要将请求的发送者和接收者解耦的场景。