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

Estou com dúvida no curso de Design Patterns para bons programadores, no exercício 4 do capítulo Muitos Descontos e o Chain of Responsibility.

Fiquei em dúvida em como chamar o resultado dessas classes, ao passar o parâmetro do tipo de formato que escolhi, devo necessariamente chamar o resultado escolhido já? Ou existe uma forma de apenas passar o formato e mandar gerar o resultado sem dizer qual o tipo de resposta?

4 respostas

Ele disse que a conta só possui saldo e nome do titular. Eu faria assim: ClasseX.retornaConta("XML","PAULO FERREIRA");

ClasseY.retornaConta("CSV","PAULO FERREIRA");

Dentro desse retornaConta há várias classes trabalhando se XML não for o formato da classe que está processando ela chamará outra classe da cadeia até que chegue na classe cujo getFormato seja igual ao passado no parâmetro.

Dentro desse retornaConta há várias classes trabalhando; se XML não for o formato da classe que está processando ela chamará outra classe da cadeia até que chegue na classe cujo getFormato seja igual ao passado no parâmetro.

Oi Luan,

Eu não entendi bem a sua pergunta!

Pode refazer?

Um abraço

solução!

Fala Luan, boa noite!

Estou postando uma forma de se fazer isto, existem N maneiras, esta foi a que eu optei, veja se você consegue entender como tudo acontece, observe que a regra de negócio fica por conta de apenas uma classe que ajusta a ordem de verificação caso a primeira não atenda vai para o próxima e assim por diante.

public enum Formato {
    XML, CSV, PORCENTO, JSON
}

public class Requisicao {

    private Formato formato;
    private Conta conta;

public Requisicao(Formato formato, Conta conta) {
        this.formato = formato;
        this.conta = conta;
    }

    public Formato getFormato() {
        return formato;
    }

    public Conta getConta() {

        return this.conta;
    }
}

public class ProcessaResquisicao {

    private static final String FORMATO_DESCONHECIDO = "Formato Desconhecido";

    private XML xml = null;
    private CSV csv = null;
    private Porcento porcento = null;

    public ProcessaResquisicao() {

        this.xml = new XML();
        this.csv = new CSV();
        this.porcento = new Porcento();

        this.xml.setProximoTipo(csv);
        this.csv.setProximoTipo(porcento);
    }

    public void parseResicao(Requisicao requisicao) {

        String result = result = this.xml.parseRequisicao(requisicao);

        System.out.println((result == null) ? FORMATO_DESCONHECIDO : result;
    }
}