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

Dúvida no Ex. 5 da Aula 2 - Muitos Descontos e o Chain of Responsibility

Gostaria de saber se há outra maneira além da que implementei, ao passar o próximo item da corrente pelo construtor. Da maneira como implementei, não gostei da abordagem, porque na classe organizadora da corrente, tive de escrever a sequência da cadeia de trás para frente, visto que a o objeto que deve ser passado no parâmetro "proxima" já deve estar criado.

Há outra maneira de fazer de modo que fique mais elegante a passagem do "proxima" pelo construtor?

public class Csv implements Resposta {
    private Resposta proxima;

    Csv(Resposta proxima){
        this.proxima = proxima;
    }

    @Override
    public void responde(Requisicao req, Conta conta) {

        if (req.getFormato() == Formato.CSV) {
            String formatado = conta.getTitular() + ";" + conta.getSaldo();
            System.out.println("CSV: " + formatado);
        } else {
            proxima.responde(req, conta);
        }
    }
}

////////////////////////////////
public class CadeiaDeRespostas {

    public void serializa(Conta conta, Requisicao req){

        Resposta semformato = new SemFormato();
        Resposta porcento = new Porcento(semformato);
        Resposta csv = new Csv(porcento);
        Resposta xml = new Xml(csv);

        xml.responde(req, conta);
    }
}
2 respostas
solução!

Oi Gabriel,

Se vc optar por passar pelo construtor, não tem jeito! :/

O que vc pode tentar fazer é melhorar um pouco a legibilidade disso.. Se a cadeia for pequena, passar inline:

new Primeiro(new Segundo(new Terceiro()));

Faz sentido?

PS: Gostei da sua foto. O mestre Yoda é meu mestre também!

Um abraço!

Entendido!

Quanto ao Yoda, quem sabe um dia chego no nível dele. rs

Obrigado Maurício!

Abraço!