-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathConceptualExample01.h
More file actions
67 lines (50 loc) · 1.47 KB
/
ConceptualExample01.h
File metadata and controls
67 lines (50 loc) · 1.47 KB
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
// ===========================================================================
// ConceptualExample01.h // State Pattern
// ===========================================================================
namespace ConceptualExample01 {
class Context;
class StateBase
{
public:
virtual ~StateBase() {}
virtual void handle(Context* context) = 0;
virtual std::string getDescription() = 0;
};
class Context
{
private:
StateBase* m_state;
public:
Context(StateBase* state);
~Context();
void request();
void setState(StateBase* base);
};
class ConcreteStateA;
class ConcreteStateB;
class ConcreteStateA : public StateBase
{
private:
std::string m_description;
public:
ConcreteStateA() : m_description{"State A"} {}
void handle(Context* context) override;
std::string getDescription() override {
return m_description;
}
};
class ConcreteStateB : public StateBase
{
private:
std::string m_description;
public:
ConcreteStateB() : m_description{ "State B" } {}
void handle(Context* context) override;
std::string getDescription() override {
return m_description;
}
};
}
// ===========================================================================
// End-of-File
// ===========================================================================