5
5
6
6
7
7
class Handler :
8
+
9
+ def __init__ (self ):
10
+ self ._successor = None
8
11
9
12
def successor (self , successor ):
10
- self .successor = successor
13
+ self ._successor = successor
11
14
15
+ def handler (self , request ):
16
+ raise NotImplementedError ('Must provide implementation in subclass.' )
12
17
13
18
class ConcreteHandler1 (Handler ):
14
19
15
20
def handle (self , request ):
16
21
if 0 < request <= 10 :
17
22
print ('request {} handled in handler 1' .format (request ))
18
- else :
19
- self .successor .handle (request )
23
+ elif self . _successor :
24
+ self ._successor .handle (request )
20
25
21
26
22
27
class ConcreteHandler2 (Handler ):
23
28
24
29
def handle (self , request ):
25
30
if 10 < request <= 20 :
26
31
print ('request {} handled in handler 2' .format (request ))
27
- else :
28
- self .successor .handle (request )
32
+ elif self . _successor :
33
+ self ._successor .handle (request )
29
34
30
35
31
36
class ConcreteHandler3 (Handler ):
32
37
33
38
def handle (self , request ):
34
39
if 20 < request <= 30 :
35
40
print ('request {} handled in handler 3' .format (request ))
36
- else :
41
+ elif self ._successor :
42
+ self ._successor .handle (request )
43
+
44
+ class DefaultHandler (Handler ):
45
+
46
+ def handle (self , request ):
37
47
print ('end of chain, no handler for {}' .format (request ))
38
48
39
49
@@ -43,11 +53,13 @@ def __init__(self):
43
53
h1 = ConcreteHandler1 ()
44
54
h2 = ConcreteHandler2 ()
45
55
h3 = ConcreteHandler3 ()
56
+ h4 = DefaultHandler ()
46
57
47
58
h1 .successor (h2 )
48
59
h2 .successor (h3 )
60
+ h3 .successor (h4 )
49
61
50
- self .handlers = (h1 , h2 , h3 )
62
+ self .handlers = (h1 , h2 , h3 , h4 , )
51
63
52
64
def delegate (self , requests ):
53
65
for request in requests :
0 commit comments