Skip to content

Instantly share code, notes, and snippets.

@alexduarte
Created December 20, 2011 00:29
Show Gist options
  • Save alexduarte/1499594 to your computer and use it in GitHub Desktop.
Save alexduarte/1499594 to your computer and use it in GitHub Desktop.
public class Conta {
private double saldo;
private String nomeDoTitular;
public Conta(String nomeDoTitular, double saldo){
this.nomeDoTitular = nomeDoTitular;
this.saldo = saldo;
}
public double getSaldo() {
return saldo;
}
public String getNomeDoTitular() {
return nomeDoTitular;
}
}
public enum Formato {
XML, CSV, PORCENTO;
}
public class FormatoCSV implements Tipo {
private Tipo tipo;
public String formata(Requisicao requisicao, Conta conta) {
if(requisicao.getFormato() == Formato.CSV){
return conta.getNomeDoTitular() + "\n" + conta.getSaldo() + ";";
}
return tipo.formata(requisicao, conta) ;
}
public void setProximo(Tipo tipo) {
this.tipo = tipo;
}
}
public class FormatoPorcento implements Tipo {
private Tipo tipo;
public String formata(Requisicao requisicao, Conta conta) {
if(requisicao.getFormato() == Formato.PORCENTO){
return conta.getNomeDoTitular() + "\n" + conta.getSaldo() + "%";
}
else{
return tipo.formata(requisicao, conta);
}
}
public void setProximo(Tipo tipo) {
this.tipo = tipo;
}
}
public class FormatoXML implements Tipo {
private Tipo tipo;
public String formata(Requisicao requisicao, Conta conta) {
if(requisicao.getFormato() == Formato.XML){
return "<nometitular>" + conta.getNomeDoTitular() + "</nometitular>" + "\n" +
"<saldo>" + conta.getSaldo() + "</saldo>";
}
else{
return tipo.formata(requisicao, conta);
}
}
public void setProximo(Tipo tipo) {
this.tipo = tipo;
}
}
public class Requisicao {
private Formato formato;
public Requisicao(Formato formato){
this.formato = formato;
}
public Formato getFormato() {
return formato;
}
}
public class ServidorDeRequisicoes {
public String retornaRequisicao(Requisicao requisicao, Conta conta){
Tipo f1 = new FormatoPorcento();
Tipo f2 = new FormatoXML();
Tipo f3 = new FormatoCSV();
f1.setProximo(f2);
f2.setProximo(f3);
return f1.formata(requisicao, conta);
}
}
public class TestaRequisicoes {
public static void main(String[] args) {
ServidorDeRequisicoes server = new ServidorDeRequisicoes();
Requisicao requisicao = new Requisicao(Formato.CSV);
Conta c1 = new Conta("Alexsander Duarte", 500.00);
System.out.println(server.retornaRequisicao(requisicao, c1));
}
}
public interface Tipo {
String formata(Requisicao requisicao, Conta conta);
void setProximo(Tipo tipo);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment