Как добавить в цепочку ответственности паттерн-декоратор?

Я создал следующий UML. По сути, это конвертер валют. В настоящее время это цепочка ответственности . Но теперь я хочу добавить узор декоратора . Так, например, добавьте фиксированную сумму обработки. Как я могу вставить сюда узор Decorator? Спасибо за помощь!

1 ответ

Цепочка ответственности направлена ​​на то, чтобы предоставить более чем одному объекту (экземплярам специализаций) возможность обрабатывать запрос, в данном случае операцию. Декоратор предназначен для дополнительной ответственности, например, для расчета некоторых фиксированных транзакционных сборов.

В зависимости от ваших намерений можно рассмотреть несколько решений:

  • Добавление ответственности ко всей цепочке: декоратор реализует/реализует интерфейс и ссылается на элемент (либо другой декоратор, либо первый обработчик цепочки.
  • Добавление ответственности к обработчикам: декоратор расширяет/специализируется и ссылается на файл . Это кажется очень гибким, но делает цепочку громоздкой для заполнения. Кроме того, это хорошо работает с цепочкой, только если дополнительная ответственность может быть подключена к цепочке. запрос: иначе цепочка не могла бы использовать эту ответственность.

Третий подход, который стоит изучить, — гибридный:

  • изменить свой, чтобы сделать следующий вместо . Потому что на самом деле вам не нужно знать, как следующий вычисляет результат, если текущий не является подходящим. В этом случае вставьте свой декоратор на уровне интерфейса. Затем у вас есть выбор во время выполнения, если вы хотите вставить один глобальный декоратор перед цепочкой, или если вы хотите вставить несколько декораторов для некоторых обработчиков.