промокоды были разные, можно было накрутить кучу условий(сколько товара, какая сумма, группа товара, группа юзера...) + куча(конечная) результата (скидка на весь заказ, на группу, на товар, товар в подарок) поля условия и результа хранились json в БД, когда прокод доставлся из БД фабрика знала какой класс посторить и как интерпретировать json, какждый промо реализовывал интерфейс с методом isSpecifiedBy (спецификация) который принимал только корзину который возвращал новую корзину с новыми ценами + результат (сколько общая скидка, на какие товары скидка...)