0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: chain of responsibility, паттерны, шаблоны проектирования, цепочка обязанностей</p>
1
<p>Теги: chain of responsibility, паттерны, шаблоны проектирования, цепочка обязанностей</p>
2
<p><strong>Цепочка обязанностей</strong>(Chain of Responsibility) представляет собой<strong>поведенческий шаблон проектирования</strong>, который позволяет организовать в системе уровни ответственности. Как это выглядит на практике?</p>
2
<p><strong>Цепочка обязанностей</strong>(Chain of Responsibility) представляет собой<strong>поведенческий шаблон проектирования</strong>, который позволяет организовать в системе уровни ответственности. Как это выглядит на практике?</p>
3
<p>Давайте представим, что у нас есть 3 три платежных карточки (метода): A, B и C, которые объединены одним банковским счетом. На каждой карточке -- разная сумма, на А -- $100, на B -- $300, на С -- $1000. Мы решили, что пока не потратим деньги с первой карточки (А), не будем трогать (B), ну а третью (C) вообще оставим на черный день. Итак, мы делаем заказ товара стоимостью $210. Так как существует цепочка обязанностей, первым на возможность оплаты будет проверена карточка A (иными словами, отработает метод А). Если оплата пройдет, цепь разорвется, а в случае неудачи запрос поступит на карточку B (перейдет к методу B). В нашем случае A, B и C представляют собой звенья цепи, а все вышеописанное -- не что иное, как<strong>цепочка обязанностей</strong>.</p>
3
<p>Давайте представим, что у нас есть 3 три платежных карточки (метода): A, B и C, которые объединены одним банковским счетом. На каждой карточке -- разная сумма, на А -- $100, на B -- $300, на С -- $1000. Мы решили, что пока не потратим деньги с первой карточки (А), не будем трогать (B), ну а третью (C) вообще оставим на черный день. Итак, мы делаем заказ товара стоимостью $210. Так как существует цепочка обязанностей, первым на возможность оплаты будет проверена карточка A (иными словами, отработает метод А). Если оплата пройдет, цепь разорвется, а в случае неудачи запрос поступит на карточку B (перейдет к методу B). В нашем случае A, B и C представляют собой звенья цепи, а все вышеописанное -- не что иное, как<strong>цепочка обязанностей</strong>.</p>
4
<p>Схожим образом работает и банкомат:</p>
4
<p>Схожим образом работает и банкомат:</p>
5
<p>Таким образом, цепочка обязанностей позволяет создавать<strong>цепочки объектов</strong>. То есть запрос поступит с одного конца и пройдет через каждый объект, пока не обнаружит подходящий обработчик.</p>
5
<p>Таким образом, цепочка обязанностей позволяет создавать<strong>цепочки объектов</strong>. То есть запрос поступит с одного конца и пройдет через каждый объект, пока не обнаружит подходящий обработчик.</p>
6
<p>Но давайте теперь посмотрим, как это выглядит в коде. Приведем пример с банковскими счетами. Мы имеем базовый<strong>Account</strong>, где находится логика соединения счетов цепью и определенные счета:</p>
6
<p>Но давайте теперь посмотрим, как это выглядит в коде. Приведем пример с банковскими счетами. Мы имеем базовый<strong>Account</strong>, где находится логика соединения счетов цепью и определенные счета:</p>
7
<p>На самом деле, осталось лишь приготовить цепь, применяя вышеобъявленные звенья (Bank, Paypal, Bitcoin):</p>
7
<p>На самом деле, осталось лишь приготовить цепь, применяя вышеобъявленные звенья (Bank, Paypal, Bitcoin):</p>
8
<p><em>По материалам статьи<a>"Design Patterns for Humans"</a></em>.</p>
8
<p><em>По материалам статьи<a>"Design Patterns for Humans"</a></em>.</p>
9
9