Skip to content

Instantly share code, notes, and snippets.

@rafaelchagasb
Created December 19, 2011 13:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafaelchagasb/1497121 to your computer and use it in GitHub Desktop.
Save rafaelchagasb/1497121 to your computer and use it in GitHub Desktop.
Exercício 4 - Chain and Responsability
public class Requisicao {
private Formato formato;
public Requisicao(Formato formato)
{
this.formato = formato;
}
public Formato getFormato() {
return formato;
}
}
public class Conta {
private String nomeTitular;
private double saldo;
public Conta(String nomeTitular,double saldo) {
this.nomeTitular = nomeTitular;
this.saldo = saldo;
}
public String getNomeTitular() {
return nomeTitular;
}
public void setNomeTitular(String nomeTitular) {
this.nomeTitular = nomeTitular;
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
}
public enum Formato {
XML,
CSV,
PORCENTO
}
public interface Request {
String responde(Requisicao requisicao,Conta conta);
void proximo(Request proximo);
}
public class RequestCSV implements Request{
private Request proximo;
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) {
this.proximo = proximo;
}
}
public class RequestXML implements Request{
private Request proximo;
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) {
this.proximo = proximo;
}
}
public class RequestPorcento implements Request{
private Request proximo;
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) {
this.proximo = proximo;
}
}
public class RequestBlank implements Request{
public String responde(Requisicao requisicao, Conta conta) {
return null;
}
public void proximo(Request proximo) {
}
}
public class Servidor {
public String request(Requisicao requisicao,Conta conta)
{
Request r1 = new RequestCSV();
Request r2 = new RequestXML();
Request r3 = new RequestPorcento();
Request r4 = new RequestBlank();
r1.proximo(r2);
r2.proximo(r3);
r3.proximo(r4);
return r1.responde(requisicao, conta);
}
}
public class TestarRequisicao
{
public static void main(String[] args) {
Requisicao requisicao = new Requisicao(Formato.CSV);
Conta conta = new Conta("Rafael",1200);
Servidor server = new Servidor();
System.out.println(server.request(requisicao, conta));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment