Как предложил DTB, цепочки обязанностей кажется наиболее применима здесь, с небольшим изменением: Как правило, цепочка обязанностей находит точно один обработчик, затем выходит. Если крупный заказчик заказал в субботу, вам нужно будет выполнить два обработчика. Обратите внимание, что это нетривиальное расширение, потому что ваш объект мог быть изменен в среднем времени, и упорядочивание обработчиков становится актуальным. Это может быть очень сложно. Например. что, если есть скидка в 10 долларов и скидка 10%? Теперь порядок операций имеет значение, если оба не работают по первоначальной цене. Вы догадываетесь, я думаю.
Важно понимать, что шаблоны проектирования не четкие, поэтому, как правило, не один правильный ответ. Тем не менее я считаю, что это очень близко к цепочке ответственности и дальше от других узоров, которые были упомянуты.
Во-первых, желательно, чтобы конкретные реализации выполняли проверку, действительно ли они применимы к предмету под рукой, что типично для Цепочки Ответственности.
Во-вторых, то, что вам нужно, будет вести себя по-разному в зависимости от фактических данных вашего объекта. Стратегия Стратегия просто инкапсулирует различные алгоритмы, которые по существу достигают того же самого (т. Е. У вас могут быть разные стратегии для расчета 10% -ной скидки, но все они должны давать одинаковое значение).
Команда шаблон является шаблоном развязки для фактического запроса на , чтобы выполнить операцию, например,если вы хотите, чтобы кто-то еще вычислил скидку, вы бы создали для этого объект Command. Фактически, обработчиками (многоадресными) событиями часто являются Цепи ответственности.
Композит узор выполнен для древовидных структур, где вы можете создавать объекты так же, как и в реальном мире. Это связано с проблемой, упомянутой выше: если вы представляете свою Цепь Ответственности как вырожденное поддерево (без ветвей), у вас будет упорядоченный список, и вы можете представить разницу между вычитанием $ 10 сначала, затем 10% или другим способом вокруг. В этом смысле его можно понимать как высоко вырожденный композит. Composite может использоваться для описания конкретной схемы дисконтирования. Тем не менее, выбор и применение схемы будет выполнять работу Цепочки обязанностей.
Как я уже сказал, это не четкие термины, они сильно связаны друг с другом, часто встречаются в вариациях (и во злоупотреблении), и, самое главное, каждый шаблон нуждается в некоторых изменениях для вашей конкретной проблемы. Тем не менее, я бы предпочел придерживаться терминологии «Цепочки ответственности» с несколькими вариантами, потому что я считаю, что она ближе всего к ситуации, которую вы описываете.
Похоже, вы ищете узор Decorator? (сорт) –
Это довольно похоже на пример использования декоратора в «Head First Design Patterns» (в качестве примера они использовали расчет цен на горячие напитки). Может быть, вы его прочитали? –
* Цепь ответственности * Модель или * Стратегия * Возможно, шаблон? – dtb