Olá Josue, tudo bem?
Obrigado por compartilhar sua dúvida conosco. Realmente, a ordem em que os descontos são chamados na cadeia de responsabilidade é importante para que o desconto correto seja aplicado.
No exemplo que você compartilhou, o desconto para orçamentos com mais de cinco itens é aplicado antes do desconto para orçamentos com valor maior que quinhentos. Isso significa que, se um orçamento tiver mais de cinco itens e também tiver um valor maior que quinhentos, apenas o desconto para orçamentos com mais de cinco itens será aplicado.
Para corrigir esse problema, basta inverter a ordem em que os descontos são chamados na cadeia de responsabilidade. Dessa forma, o desconto para orçamentos com valor maior que quinhentos será aplicado primeiro e, em seguida, o desconto para orçamentos com mais de cinco itens.
Segue abaixo o código corrigido:
Desconto desconto = new DescontoParaOrcamentoComValorMaiorQueQuinhentos(
new DescontoParaOrcamentoComMaisDeCincoItens(
new SemDesconto()));
Espero ter ajudado e bons estudos!