-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommand.cpp
81 lines (72 loc) · 1.69 KB
/
command.cpp
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* \file
* \brief
*
* \todo
*/
/*
Command contains an action that you need to defer for some reason.
We split the task into two commands (CommandDefence and CommandAttack),
and queue them up in Commands.
*/
#include <vector>
#include <algorithm>
#include <iostream>
//-------------------------------------------------------------------------------------------------
class ICommand
{
public:
virtual ~ICommand() { }
virtual void execute() = 0;
};
//-------------------------------------------------------------------------------------------------
class CommandDefence : public ICommand
{
public:
void execute()
{
std::cout << "command_defence;";
}
};
//-------------------------------------------------------------------------------------------------
class CommandAttack : public ICommand
{
public:
void execute()
{
std::cout << "command_attack;" << std::endl;
}
};
//-------------------------------------------------------------------------------------------------
class Commands
{
std::vector<ICommand *> _commands;
struct ExecuteCommand
{
void operator()(ICommand *command)
{
command->execute();
}
};
public:
void addCommand(ICommand &command)
{
_commands.push_back(&command);
}
void execute()
{
std::for_each(_commands.begin(), _commands.end(), ExecuteCommand());
}
};
//-------------------------------------------------------------------------------------------------
int main()
{
CommandDefence command_defence;
CommandAttack command_attack;
Commands commands;
commands.addCommand(command_defence);
commands.addCommand(command_attack);
commands.execute();
return 0;
}
//-------------------------------------------------------------------------------------------------