Как предполагает dtb, Цепочка ответственности представляется наиболее применимой здесь с небольшим изменением: как правило, Цепочка ответственности находит ровно один обработчик , а затем завершается. Если крупный клиент заказал в субботу, вам нужно выполнить два обработчика. Обратите внимание, что это является нетривиальным расширением, потому что ваш объект мог измениться за это время, и упорядочение обработчиков становится актуальным. Это может быть очень сложно. Например. Что делать, если есть скидка 10 долларов и скидка 10%? Теперь порядок операций имеет значение, если только оба не работают по первоначальной цене. Вы поняли идею, я думаю.
Важно понимать, что шаблоны проектирования не являются четкими, поэтому обычно нет единственного правильного ответа. Тем не менее, я считаю, что это очень близко к цепочке ответственности и дальше от других моделей, которые были упомянуты.
Во-первых, желательно, чтобы конкретные реализации выполняли проверку, действительно ли они применимы к рассматриваемому предмету, что типично для Цепочки ответственности.
Во-вторых, то, что вам нужно, будет вести себя по-разному в зависимости от фактических данных в вашем объекте. Шаблон Strategy просто инкапсулирует различные алгоритмы, которые, по сути, достигают одного и того же (то есть, у вас могут быть разные стратегии для расчета скидки 10%, но все они должны давать одно и то же значение).
Шаблон Command является шаблоном развязки для фактического запроса на выполнение операции, например, если вы хотите, чтобы кто-то еще рассчитал скидку, вы бы создали объект Command для этого. Фактически обработчиками (многоадресных) событий часто являются Chains of Responsibility .
Шаблон Composite создан для древовидных структур, где вы можете составлять объекты так же, как в реальном мире. Это связано с проблемой, упомянутой ранее: если вы представляете свою цепочку ответственности как вырожденное поддерево (без ветвей), у вас будет упорядоченный список, и вы можете сначала представить разницу между вычитанием 10 долл. США, затем 10% или другим способом. вокруг. В этом смысле его можно понимать как вырожденный композит. Композит может быть использован для описания конкретной схемы дисконтирования. Тем не менее, выбор и применение схемы было бы работой Цепочки Обязательств.
Как я уже сказал, это не четкие термины, они тесно связаны друг с другом, часто встречаются в вариациях (и в злоупотреблениях), и, что наиболее важно, каждый шаблон нуждается в некоторых изменениях для вашей конкретной проблемы. Тем не менее, я бы предпочел придерживаться терминологии Chain of Responsibility с несколькими вариациями, потому что я считаю, что она наиболее близка к ситуации, которую вы описываете.