Skip to content

Commit 3d22ac0

Browse files
committed
added abstract handle method in Handler class; added next handler check in concrete handlers.
1 parent c0edd5b commit 3d22ac0

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

chain.py

+19-7
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,45 @@
55

66

77
class 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

1318
class 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

2227
class 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

3136
class 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

Comments
 (0)