понедельник, 10 февраля 2014 г.

Команда(Command)

Инкапсулирует запрос как объект

#include <iostream>
#include <vector>
using namespace std;

class Command
{
public:
virtual ~Command() {}
virtual void operator()() = 0;
};

class Add : public Command
{
public:
Add(int& a) : num(a) {}
virtual void operator()() { cout << "num + a" << endl; num += 20; }
private:
int& num;
};

class Multiply : public Command
{
public:
Multiply(int& a) : num(a) {}
virtual void operator()() { cout << "num * a" << endl; num *= 3; }
private:
int& num;
};

class Exe  ///Главный объект, который знает о получателе и инициаторе
{
public:
Exe(int a) : num(a) {}
void pushAddCommand() { commands.push_back(new Add(num)); }
void pushMultyCommand() { commands.push_back(new Multiply(num)); }
void ExecuteAllCommands() {for (int i = 0; i < commands.size(); ++i) (*commands[i])();}
int getNum() const {return num;}
private:
int num;  //в моем случае получателем выступает данный инт
vector<Command*> commands;
};

int main()
{
Exe obj(20);
obj.pushAddCommand();
obj.pushMultyCommand();
obj.ExecuteAllCommands();
cout << obj.getNum() << endl;
}

Комментариев нет:

Отправить комментарий