Цепочка обязанностей (Chain of Responsibility)
— это поведенческий паттерн, который позволяет передавать данные последовательно по обработчикам цепочки.
На практике очень часто используется с паттерном проектирования Компоновщик. Т.к. в дереве элементов легко можно выделить цепочку обработчиков.
Также паттерн проектирования python Цепочка обязанностей очень похож на паттерн Декоратор.
Однако, в отличие от декоратора обработчик может прервать цепочку.
Реализация паттерна проектирования Цепочка обязанностей на python
# coding: utf-8 class HttpHandler(object): """Абстрактный класс обработчика""" def handle(self, code): raise NotImplementedError() class Http404Handler(HttpHandler): """Обработчик для кода 404""" def handle(self, code): if code == 404: return 'Страница не найдена' class Http500Handler(HttpHandler): """Обработчик для кода 500""" def handle(self, code): if code == 500: return 'Ошибка сервера' class Client(object): def __init__(self): self._handlers = [] def add_handler(self, h): self._handlers.append(h) def response(self, code): for h in self._handlers: msg = h.handle(code) if msg: print 'Ответ: %s' % msg break else: print 'Код не обработан' client = Client() client.add_handler(Http404Handler()) client.add_handler(Http500Handler()) client.response(400) # Код не обработан client.response(404) # Ответ: Страница не найдена client.response(500) # Ответ: Ошибка сервера