Design Patterns - Command - Example 1


// command_example.cpp
#include <iostream>
#include <string>

using namespace std;

// interface Command
class Command {
  public:
    virtual void execute() = 0;
};

class NoCommand : public Command {
  public:
    void execute() {}
};

// class Invoker
//
// to invoke commands
//
class Invoker {
  public:
    Invoker() {
      command = new NoCommand;
    }

    void setCommand(Command *command) {
      this->command = command;
    }

    void doIt() {
      command->execute();
    }

  private:
    Command *command;
};

// Commands Receivers
class Receiver1 {
  public:
    void action() {
      cout << "Receiver1 is in action." << endl;
    }
};

class Receiver2 {
  public:
    void action1() {
      cout << "Receiver2 is in action1." << endl;
    }
    void action2() {
      cout << "Receiver2 is in action2." << endl;
    }
};

// Commands
class Command1 : public Command {
  public:
    Command1(Receiver1 *receiver) {
      this->receiver = receiver;
    }

    void execute() {
      receiver->action();
    }

  private:
    Receiver1 *receiver;
};

class Command2 : public Command {
  public:
    Command2(Receiver2 *receiver) {
      this->receiver = receiver;
    }

    void execute() {
      receiver->action1();
      receiver->action2();
    }

  private:
    Receiver2 *receiver;
};

int main(int argc, char **argv) {
  Receiver1 *receiver1 = new Receiver1;
  Receiver2 *receiver2 = new Receiver2;

  Command1 *command1 = new Command1(receiver1);
  Command2 *command2 = new Command2(receiver2);


  Invoker invoker;
  // invoker ready to give command1 to Receiver1.
  invoker.setCommand(command1);
  invoker.doIt();

  // invoker ready to give command2 to Receiver2.
  invoker.setCommand(command2);
  invoker.doIt();


  delete receiver1;
  delete receiver2;
  delete command1;
  delete command2;

  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值