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;
}
}