Как добавить в цепочку ответственности паттерн-декоратор?
1 ответ
Цепочка ответственности направлена на то, чтобы предоставить более чем одному объекту (экземплярам специализаций) возможность обрабатывать запрос, в данном случае операцию. Декоратор предназначен для дополнительной ответственности, например, для расчета некоторых фиксированных транзакционных сборов.
В зависимости от ваших намерений можно рассмотреть несколько решений:
- Добавление ответственности ко всей цепочке: декоратор реализует/реализует интерфейс и ссылается на
элемент (либо другой декоратор, либо первый обработчик цепочки. - Добавление ответственности к обработчикам: декоратор расширяет/специализируется и ссылается на файл . Это кажется очень гибким, но делает цепочку громоздкой для заполнения. Кроме того, это хорошо работает с цепочкой, только если дополнительная ответственность может быть подключена к цепочке.
запрос: иначе цепочка не могла бы использовать эту ответственность.
Третий подход, который стоит изучить, — гибридный:
- изменить свой, чтобы сделать следующий
вместо . Потому что на самом деле вам не нужно знать, как следующий вычисляет результат, если текущий не является подходящим. В этом случае вставьте свой декоратор на уровне интерфейса. Затем у вас есть выбор во время выполнения, если вы хотите вставить один глобальный декоратор перед цепочкой, или если вы хотите вставить несколько декораторов для некоторых обработчиков.