您的位置:首页 > 其它

Design Patterns - Command - Example 1

2012-06-07 16:35 197 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: