Page 78 - 4190
P. 78
Патерн Chain of Responsibility
Патерн Chain of Responsibility (Ланцюжок відповідальностей) –
шаблон об'єктно-орієнтованого дизайну у програмуванні.
В об'єктно-орієнтованому дизайні, шаблон «ланцюжок відповіда-
льностей» є шаблоном, який складається з об'єктів «команда» і серії
об'єктів-виконавців. Кожен об'єкт-виконавець має логіку, що описує
типи об'єктів «команда», які він може обробляти, а також як передати
далі ланцюжком ті об'єкти-команди, що він не може обробляти. Крім
того існує механізм для додавання нових, призначених для обробки
об'єктів у кінець ланцюжка.
У варіаціях стандартного ланцюжка відповідальностей, деякі об-
робники можуть бути в ролі диспетчерів, які здатні відсилати коман-
ди в різні напрямки, формуючи Дерево відповідальності. У деяких
випадках це можна організувати рекурсивно, коли об'єкт який оброб-
люється, викликає об'єкт вищого рівня обробки з командою, що нама-
гається вирішити меншу частину проблеми; у цьому випадку рекурсія
продовжує виконуватися, поки команда не виконається, або поки де-
рево повністю не буде оброблене. XML-інтерпретатор (проаналізова-
ний, але який ще не було поставлено на виконання) може бути хоро-
шим прикладом.
Цей шаблон застосовує ідею слабкого зв'язку, який розглядається
як програмування у найкращих практиках.
Шаблон рекомендований для використання в умовах:
1. У розроблюваній системі є група об'єктів, які можуть обробля-
ти повідомлення певного типу.
2. Всі повідомлення повинні бути оброблені хоча б одним об'єк-
том системи.
3. Повідомлення в системі обробляються за схемою «обробив сам
або передай іншому», тобто одні повідомлення обробляються на тому
рівні, де вони отримані, а інші пересилаються об'єктам іншого рівня.
UML-діаграма класів патерну Chain of Responsibility зображена
на рисунку 7.10.
Патерн Observer (Спостерігач) – визначає залежність типу «один
до багатьох» між об'єктами таким чином, що при зміні стану одного
об'єкта всіх залежних від нього сповіщають про цю подію.
78