Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Chain of Responsability

Como a cadeia para e retorna justamente o objeto que eu preciso, se isso não está especificado?

public class CalculadoraDeDescontos {

    public BigDecimal calcular(Orcamento orcamento) {
        Desconto desconto = new DescontoParaOrcamentoComMaisDeCincoItens(
                new DescontoParaOrcamentoComValorMaiorQueQuinhentos(
                        new SemDesconto()));

        return desconto.calcular(orcamento);
    }

}
2 respostas
solução!

Olá, Irene não sei se entendi bem sua dúvida.

Inicialmente a varíavel desconto é do tipo DescontoParaOrcamentoComMaisDeCincoItens. Então na linha return desconto.calcular(orcamento); estaremos chamando o método calcular() de DescontoParaOrcamentoComMaisDeCincoItens, que caso o desconto seja aplicável, entra no if e sua execução para por aí, encerrando-se a cadeia logo no primeiro objeto(DescontoParaOrcamentoComMaisDeCincoItens).

Porém se o desconto não for aplicável, será retornado a chamada proximo.calcular() e nesse ponto o objeto proximo é do tipo DescontoParaOrcamentoComValorMaiorQueQuinhentos pois foi ele que passamos para o construtor de DescontoParaOrcamentoComMaisDeCincoItens. Caso o desconto seja aplicável entra no if e sua execução para por aí, encerrando-se a cadeia no segundo objeto(DescontoParaOrcamentoComValorMaiorQueQuinhentos).

E finalmente se o desconto não for aplicável, será retornado a chamada proximo.calcular(), onde nesse momento proximo é um objeto do tipo SemDesconto, pois foi ele que passamos para o construtor de DescontoParaOrcamentoComValorMaiorQueQuinhentos.

Espero ter ajudado :)

Valeu Thiago, agora ficou claro! =)