Minha percepção foi que, para este exercício, a escolha do Chain of Responsibility não é o mais adequado. Poderíamos deixar o próprio enum Formato possuir uma estratégia de responder no formato adequado, ficando a solução mais próxima ao padrão Strategy mesmo.
O enum ficaria:
public enum Formato {
XML (new RespostaEmXml()),
CSV (new RespostaEmCsv()),
PORCENTO (new RespostaEmPorcento());
private Resposta resposta;
private Formato(Resposta resposta) {
this.resposta = resposta;
}
public Resposta getReposta() {
return this.resposta;
}
}
Exemplo de uma das respostas:
public class RespostaEmPorcento implements Resposta {
public void responder(Requisicao req, Conta conta) {
System.out.println(conta.getTitular() + "%" + conta.getSaldo());
}
}
Exemplo da chamada, que poderia ser melhorada sobre as responsabilidades:
Requisicao req = new Requisicao(Formato.CSV);
Conta conta = new Conta("Michele", 49000.00);
req.getFormato().getReposta().responder(req, conta);