Alguém poderia apresentar para mim o código completo deste exercício, para que eu possa comparar com o meu?
Alguém poderia apresentar para mim o código completo deste exercício, para que eu possa comparar com o meu?
Oi Marco
Não temos o código pronto, vou tentar fazer e postar aqui. Enquanto isso, não quer postar o seu código pra irmos olhando? :)
Ok, Mario, lá vai...
public class Conta {
private String titular;
private double saldo;
public Conta (String titular, double saldo) {
this.titular = titular;
this.saldo = saldo;
}
public String getTitular() {
return titular;
}
public double getSaldo() {
return saldo;
}
}
public enum Formato {
XML,
CSV,
PORCENTO
}
public class Requisicao {
private Formato formato;
public Requisicao (Formato formato) {
this.formato = formato;
}
public Formato getFormato() {
return formato;
}
}
public interface Resposta {
void responde(Requisicao req, Conta conta);
void setProxima(Resposta resposta);
}
public class RespostaEmXML implements Resposta {
private Resposta outraResposta;
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 {
outraResposta.responde(req, conta);
}
}
public void setProxima(Resposta resposta) {
this.outraResposta = resposta;
}
}
public class RespostaEmCsv implements Resposta{
private Resposta outraResposta;
public void responde(Requisicao req, Conta conta) {
if(req.getFormato() == Formato.CSV) {
System.out.println(conta.getTitular() + ";" + conta.getSaldo());
}
else {
outraResposta.responde(req, conta);
}
}
public void setProxima(Resposta resposta) {
this.outraResposta = resposta;
}
}
public class RespostaEmPorcento implements Resposta {
private Resposta outraResposta;
public void responde(Requisicao req, Conta conta) {
if(req.getFormato() == Formato.PORCENTO) {
System.out.println(conta.getTitular() + "%" + conta.getSaldo());
}
else {
outraResposta.responde(req, conta);
}
}
public void setProxima(Resposta resposta) {
this.outraResposta = resposta;
}
}
public class DefinidorDeResposta {
public void define (Conta conta) {
Resposta r1 = new RespostaEmXML();
Resposta r2 = new RespostaEmCsv();
Resposta r3 = new RespostaEmPorcento();
r1.setProxima(r2);
r2.setProxima(r3);
}
}
public class TestaResposta {
public static void main(String[] args) {
Conta conta = new Conta ("Marco Tulio", 1000.0);
Formato formato = Formato.PORCENTO;
Requisicao rq = new Requisicao (formato);
DefinidorDeResposta dr = new DefinidorDeResposta();
dr.define(conta);
for (Formato tipo : Formato.values()) {
tipo = formato;
if (tipo == Formato.XML) {
Resposta rp = new RespostaEmXML();
rp.responde(rq, conta);
break;
} else if (tipo == Formato.CSV) {
Resposta rp = new RespostaEmCsv();
rp.responde(rq, conta);
break;
} else {
Resposta rp = new RespostaEmPorcento();
rp.responde(rq, conta);
break;
}
}
}
}
Oi Marco, tudo bem? Vendo sua resposta, tudo parece perfeito. A solução será exatamente essa, em breve será adicionada no curso (está em nossa lista de prioridades). A única mudança, que será sugerida em outro exercício, será trocar o setResposta
pelo construtor, que é uma alternativa bem mais interessante --mas não vou dar spoiler! rs. Ficou com alguma dúvida sobre esse pattern? Um abraço
Muito obrigado, Rodrigo, pelo incentivo.