55
66
77class Handler :
8+
9+ def __init__ (self ):
10+ self ._successor = None
811
912 def successor (self , successor ):
10- self .successor = successor
13+ self ._successor = successor
1114
15+ def handler (self , request ):
16+ raise NotImplementedError ('Must provide implementation in subclass.' )
1217
1318class ConcreteHandler1 (Handler ):
1419
1520 def handle (self , request ):
1621 if 0 < request <= 10 :
1722 print ('request {} handled in handler 1' .format (request ))
18- else :
19- self .successor .handle (request )
23+ elif self . _successor :
24+ self ._successor .handle (request )
2025
2126
2227class ConcreteHandler2 (Handler ):
2328
2429 def handle (self , request ):
2530 if 10 < request <= 20 :
2631 print ('request {} handled in handler 2' .format (request ))
27- else :
28- self .successor .handle (request )
32+ elif self . _successor :
33+ self ._successor .handle (request )
2934
3035
3136class ConcreteHandler3 (Handler ):
3237
3338 def handle (self , request ):
3439 if 20 < request <= 30 :
3540 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 ):
3747 print ('end of chain, no handler for {}' .format (request ))
3848
3949
@@ -43,11 +53,13 @@ def __init__(self):
4353 h1 = ConcreteHandler1 ()
4454 h2 = ConcreteHandler2 ()
4555 h3 = ConcreteHandler3 ()
56+ h4 = DefaultHandler ()
4657
4758 h1 .successor (h2 )
4859 h2 .successor (h3 )
60+ h3 .successor (h4 )
4961
50- self .handlers = (h1 , h2 , h3 )
62+ self .handlers = (h1 , h2 , h3 , h4 , )
5163
5264 def delegate (self , requests ):
5365 for request in requests :
0 commit comments