Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як організовується передача запиту по ланцюжку обробників?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Передача запиту в **Chain of Responsibility (Ланцюжку обов'язків)** організовується через **послідовне делегування** - кожен обробник отримує запит, вирішує, чи може він його обробити, і або **виконує дію**, або **передає далі** наступній ланці. **Ключове:** запит **передається по ланцюжку**, поки один з обробників не обробить його або ланцюжок не закінчиться.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняПередача запиту в **Chain of Responsibility (Ланцюжку обов'язків)** організовується через **послідовне делегування** - кожен обробник отримує запит, вирішує, чи може він його обробити, і або **виконує дію**, або **передає далі** наступній ланці. --- ### 1. **Базовий принцип** Кожен обробник зберігає **посилання на наступний** (`nextHandler`) і реалізує метод `handle(request)`: ```java abstract class Handler { protected Handler next; public Handler linkWith(Handler next) { this.next = next; return next; } public abstract boolean handle(String request); } ``` --- ### 2. **Механізм передачі** 1. Клієнт надсилає запит **першому обробнику в ланцюжку**. 2. Обробник перевіряє, чи може він його обробити. - Якщо **так**, він виконує дію (і може зупинити ланцюжок). - Якщо **ні**, він викликає `next.handle(request)`. 3. Запит **передається по ланцюжку** до тих пір, поки один з обробників не обробить його або ланцюжок не закінчиться. --- ### 3. **Приклад** ```java class AuthHandler extends Handler { public boolean handle(String request) { if (request.equals("auth")) { System.out.println("Перевірка авторизації"); return true; // оброблено, ланцюжок переривається } if (next != null) return next.handle(request); return false; } } class LogHandler extends Handler { public boolean handle(String request) { System.out.println("Логування запиту"); if (next != null) return next.handle(request); return false; } } ``` Створення ланцюжка: ```java Handler chain = new LogHandler(); chain.linkWith(new AuthHandler()); chain.handle("auth"); ``` --- ### 4. **Ключові особливості** - **Гнучкість:** можна легко переставляти або додавати ланки. - **Прозорість:** відправник не знає, хто саме обробить запит. - **Контроль передачі:** ланцюжок може завершитися достроково (при успішній обробці). --- ### **Підсумок** Запит у патерні **Chain of Responsibility** проходить **лінійним ланцюжком об'єктів**, де кожен обробник **сам вирішує**, обробляти його чи **передати далі**. Це створює **гнучку, налаштовувану послідовність дій** без жорстких зв'язків між компонентами.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.