-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresponse_chain.cpp
132 lines (110 loc) · 1.79 KB
/
response_chain.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
using namespace std;
enum Level_t
{
LOW,
MIDDLE,
HIGH
};
class Request
{
public:
explicit Request( Level_t level )
:m_Level( level )
{
}
void setLevel( Level_t level )
{
m_Level = level;
}
Level_t getLevel( void )
{
return m_Level;
}
private:
Level_t m_Level;
};
class ILevelProcessor
{
public:
virtual void process( Request* req ) = 0;
void setSuccessor( ILevelProcessor* levelProcessor )
{
successor = levelProcessor;
}
ILevelProcessor* getSuccessor( )
{
return successor;
}
virtual ~ILevelProcessor( )
{
}
protected:
void successorProcess( Request* req )
{
if( successor != NULL )
{
successor->process( req );
}
}
private:
ILevelProcessor* successor;
};
class MiddleLevelProcessor : public ILevelProcessor
{
public:
virtual void process( Request* req )
{
if( req->getLevel( ) == MIDDLE)
{
cout<<"middle level processor"<<endl;
return;
}
successorProcess( req );
}
};
class HighLevelProcessor : public ILevelProcessor
{
public:
virtual void process( Request* req )
{
if( req->getLevel( ) == HIGH )
{
cout<<"high level processor"<<endl;
return;
}
successorProcess( req );
}
};
class LowLevelProcessor : public ILevelProcessor
{
public:
virtual void process( Request* req )
{
if( req->getLevel( ) == LOW )
{
cout<<"low level processor"<<endl;
return;
}
successorProcess( req );
}
};
int main( void )
{
HighLevelProcessor high;
MiddleLevelProcessor mid;
LowLevelProcessor low;
low.setSuccessor( &mid );
mid.setSuccessor( &high );
high.setSuccessor( NULL );
// low level
Request request( LOW );
low.process( &request );
// high level
request.setLevel( HIGH );
low.process( &request );
// middle level
request.setLevel( MIDDLE );
low.process( &request );
return 0;
}