public class Formatar {
public void formatacao(Requisicao req, Conta conta){
Resposta r1 = new RespostaEmXML();
Resposta r2 = new RespostaEmCSV();
Resposta r3 = new RespostaEmPORCENTAGEM();
Resposta r4 = new SemResposta();
r1.setProxima(r2);
r2.setProxima(r3);
r3.setProxima(r4);
r1.responde(req,conta);
}
}
public class RespostaEmCSV implements Resposta{
Resposta proxima;
public void responde(Requisicao req, Conta conta){
if(req.getFormato() == Formato.CSV{
System.out.println(conta.getTitular() + "," + conta.getSaldo());
} else{
proxima.responde(req, conta);
}
}
@Override
public void setProxima(Resposta resposta) {
this.proxima = proxima;
}
}
public class RespostaEmXML implements Resposta{
Resposta proxima;
public void responde(Requisicao req, Conta conta){
if(req.getFormato() == Formato.XML){
System.out.println( "<conta><titular>"+conta.getTitular()+"</titular><saldo>"+conta.getSaldo()+"</saldo></conta>");
}else{
proxima.responde(req, conta);
}
}
@Override
public void setProxima(Resposta resposta){
this.proxima = proxima;
}
}
public class SemResposta implements Resposta {
Resposta proxima;
public void responde(Requisicao req, Conta conta){
}
@Override
public void setProxima(Resposta resposta){
}
}
public class RespostaTest {
public static void main(String args[]){
Conta c = new Conta(2000.0,"Joao da Silva");
Formatar f = new Formatar();
f.formatacao(new Requisicao(Formato.CSV), c);
}
}