Segue o fonte das classes. Vou mandar todos, desculpe se não tinha necessidade, mas preferi postar todos pra garantir que todas as informações necessárias estivessem aí.
Classe CONTA:
public class Conta {
private String nome;
private double saldo;
public Conta( String nome, double saldo ) {
this.nome = nome;
this.saldo = saldo;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @return the saldo
*/
public double getSaldo() {
return saldo;
}
}
Classe "FormatadorDeRequisicao", que é a classe onde contém a determinação da sequencia da corrente, e é onde gera o problema já que ao instanciar o objeto "formatoXML" não tem o que colocar no construtor, entrando "nulo". Da forma que está aqui nem compilar compilaria visto que dá erro por não ter nada no construtor:
public class FormatadorDeRequisicao {
public String formatar( Formato formato, Conta conta ) {
FormatoXML formatoXML = new FormatoXML();
FormatoCSV formatoCSV = new FormatoCSV( formatoXML );
FormatoPORCENTO formatoPorCentro = new FormatoPORCENTO( formatoCSV );
return formatoXML.getRetorno( formato, conta );
}
}
Enum contendo os valores para direcionar o tipo de retorno do aplicativo "Formato":
public enum Formato implements FormatoRequisicao {
XML,
CSV,
PORCENTO;
@Override
public String getRetorno(Formato formato, Conta conta) {
return "";
}
}
Método que retorna o valor CSV "FormatoCSV":
```
public class FormatoCSV implements FormatoRequisicao {
private FormatoRequisicao requisicao;
public FormatoCSV( FormatoRequisicao requisicao ) {
this.requisicao = requisicao;
}
@Override
public String getRetorno(Formato formato, Conta conta) {
if( formato == Formato.CSV ) {
return conta.getNome() + ";" + conta.getSaldo();
} else {
return this.requisicao.getRetorno( formato, conta );
}
}
}