1
resposta

Acho que tem um erro de lógica - Chain of Responsibility

na cadeia de chamamento de responsabilidade

Desconto desconto = new DescontoParaOrcamentoComMaisDeCincoItens( new DescontoParaOrcamentoComValorMaiorQueQuinhentos( new SemDesconto()));

Como está chamando de forma crescente >5 e >1000, então qualquer número > 5  vai cair no caso de >5 e não vai pegar o número de > 1000. acho que o correto seria em forma decrescente. 
1 resposta

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!