Skip to content

Instantly share code, notes, and snippets.

@rafaelchagasb
Created December 19, 2011 12:54
Show Gist options
  • Save rafaelchagasb/1497096 to your computer and use it in GitHub Desktop.
Save rafaelchagasb/1497096 to your computer and use it in GitHub Desktop.
Exercício 4 - Chain of Responsibility
public interface Request {
String responde(Requisicao requisicao,Conta conta);
void proximo(Request proximo,Conta conta);
}
public class RequestBlank implements Request{
public String responde(Requisicao requisicao, Conta conta) {
return null;
}
public void proximo(Request proximo, Conta conta) {
}
}
public class RequestCSV implements Request{
private Request proximo;
private Conta contaProximo;
public String responde(Requisicao requisicao,Conta conta) {
if(requisicao.getFormato() == Formato.CSV)
return conta.getNomeTitular()+ ";" + conta.getSaldo();
else
return proximo.responde(requisicao, conta);
}
public void proximo(Request proximo,Conta conta) {
this.proximo = proximo;
this.contaProximo = conta;
}
}
public class RequestPorcento implements Request{
private Request proximo;
private Conta conta;
@Override
public String responde(Requisicao requisicao, Conta conta) {
if(requisicao.getFormato() == Formato.PORCENTO)
return conta.getNomeTitular() + "%" + conta.getSaldo();
else
return proximo.responde(requisicao, conta);
}
public void proximo(Request proximo, Conta conta) {
this.proximo = proximo;
this.conta = conta;
}
}
public class RequestXML implements Request{
private Request proximo;
private Conta conta;
public String responde(Requisicao requisicao, Conta conta) {
if(requisicao.getFormato() == Formato.XML)
return "<nomeTitular>" + conta.getNomeTitular() + "</nomeTitular>" + "<saldo>" + conta.getSaldo() + "</saldo>";
else
return proximo.responde(requisicao, conta);
}
public void proximo(Request proximo, Conta conta) {
this.proximo = proximo;
this.conta = conta;
}
}
public class Requisicao {
private Formato formato;
public Requisicao(Formato formato)
{
this.formato = formato;
}
public Formato getFormato() {
return formato;
}
}
public class TestarRequisicao
{
public static void main(String[] args) {
Requisicao requisicao = new Requisicao(Formato.XML);
Conta conta = new Conta("Rafael",1200);
Request r1 = new RequestCSV();
Request r2 = new RequestXML();
Request r3 = new RequestPorcento();
Request r4 = new RequestBlank();
r1.proximo(r2, conta);
r2.proximo(r3, conta);
r3.proximo(r4, conta);
System.out.println(r1.responde(requisicao, conta));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment