chain.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # http://www.testingperspective.com/wiki/doku.php/collaboration/chetan/designpatternsinpython/chain-of-responsibilitypattern
  2. class Handler:
  3. def successor(self, successor):
  4. self.successor = successor
  5. class ConcreteHandler1(Handler):
  6. def handle(self, request):
  7. if request > 0 and request <= 10:
  8. print("in handler1")
  9. else:
  10. self.successor.handle(request)
  11. class ConcreteHandler2(Handler):
  12. def handle(self, request):
  13. if request > 10 and request <= 20:
  14. print("in handler2")
  15. else:
  16. self.successor.handle(request)
  17. class ConcreteHandler3(Handler):
  18. def handle(self, request):
  19. if request > 20 and request <= 30:
  20. print("in handler3")
  21. else:
  22. print('end of chain, no handler for {}'.format(request))
  23. class Client:
  24. def __init__(self):
  25. h1 = ConcreteHandler1()
  26. h2 = ConcreteHandler2()
  27. h3 = ConcreteHandler3()
  28. h1.successor(h2)
  29. h2.successor(h3)
  30. requests = [2, 5, 14, 22, 18, 3, 35, 27, 20]
  31. for request in requests:
  32. h1.handle(request)
  33. if __name__== "__main__":
  34. client = Client()