Alguém poderia apresentar para mim o código completo deste exercício, para que eu possa comparar com o meu?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.