Для каждого продукта есть калькуляторы стоимости, такие как: скидка, скидка от продавца, бонус от продавца, ежемесячная скидка и т. Д. В будущем будут добавлены калькуляторы стоимости.Декораторы затрат
У нас есть конкретный класс продукции и множество декораторов для каждого расчета стоимости. Все продукты должны использовать все калькуляторы, потому что калькуляторы решают применить свои расчеты по свойствам продукта, например, идентификатор продавца продукта, идентификатор категории, цвет и т. Д.
И есть миллионы продуктов в нашей системе, которые должны быть рассчитывается. Итак, мы лучше кэшируем декорированные калькуляторы. Потому что украшение каждого объекта продукта во время выполнения будет дорогостоящим. Но это сложно с рисунком декоратора. Похоже, что этот запах используется в нашей ситуации.
Что вы предлагаете? Должны ли мы использовать декораторы, стратегию или схему цепочки ответственности? Или нет.
Декораторы выполняют вычисления на основе свойств продукта, мы зацикливаемся на списке продуктов, чтобы применить эти вычисления ко всем продуктам. Итак, украшая каждый из этих продуктов на каждой итерации, мы думали, что кэширование логики расчета будет хорошей идеей. Но это трудно сделать с декораторами. Таким образом, лучший подход заключается в использовании шаблона стратегии как набора/получения продукта. Продукт p = новый продукт(); p.setCalculationStrategy (listOfCalculators); p.price(); // будет вызывать все калькуляторы, будут вычислены только интересующие калькуляторы –
p.price() { return listOfCalculators.price(); } listOfCalculators.price() { каждый калькулятор делать { // .... } возврата цена; } –