Шаблон проектирования Chain of Responsibility | OTUS
Прямо сейчас идет открытый вебинар «Как фасилитатор может помочь IT командам достичь успеха» . Присоединяйтесь!

Шаблон проектирования Chain of Responsibility

Цепочка обязанностей (Chain of Responsibility) представляет собой поведенческий шаблон проектирования, который позволяет организовать в системе уровни ответственности. Как это выглядит на практике?

3-1801-769806.png

Давайте представим, что у нас есть 3 три платежных карточки (метода): A, B и C, которые объединены одним банковским счетом. На каждой карточке -- разная сумма, на А -- $100, на B -- $300, на С -- $1000. Мы решили, что пока не потратим деньги с первой карточки (А), не будем трогать (B), ну а третью (C) вообще оставим на черный день. Итак, мы делаем заказ товара стоимостью $210. Так как существует цепочка обязанностей, первым на возможность оплаты будет проверена карточка A (иными словами, отработает метод А). Если оплата пройдет, цепь разорвется, а в случае неудачи запрос поступит на карточку B (перейдет к методу B). В нашем случае A, B и C представляют собой звенья цепи, а все вышеописанное -- не что иное, как цепочка обязанностей.

Схожим образом работает и банкомат:

Chain_of_Responsibility_Design_Pattern_1-1801-67ba3f.JPG

Таким образом, цепочка обязанностей позволяет создавать цепочки объектов. То есть запрос поступит с одного конца и пройдет через каждый объект, пока не обнаружит подходящий обработчик.

69ece69f35933c001375ccda0640973b_1-1801-6158f7.jpg

Но давайте теперь посмотрим, как это выглядит в коде. Приведем пример с банковскими счетами. Мы имеем базовый Account, где находится логика соединения счетов цепью и определенные счета:

1-1801-bb6272.png

На самом деле, осталось лишь приготовить цепь, применяя вышеобъявленные звенья (Bank, Paypal, Bitcoin):

2-1801-38b5ee.png

По материалам статьи «Design Patterns for Humans».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто