Created
December 21, 2011 04:47
-
-
Save alexduarte/1504634 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class EmAprovacao implements EstadoDeUmOrcamento { | |
public void aplicaDescontoExtra(Orcamento orcamento) { | |
orcamento.valor -= orcamento.valor*conceDesconto(0.05); | |
} | |
public void aprova(Orcamento orcamento) { | |
orcamento.estadoAtual = new Aprovado(); | |
} | |
public double conceDesconto(double desconto){ | |
if(desconto!=0.05){ | |
throw new RuntimeException("So pode ser concedido desconto de 5 porcento"); | |
} | |
return desconto; | |
} | |
public void reprova(Orcamento orcamento) { | |
orcamento.estadoAtual = new Reprovado(); | |
} | |
public void finaliza(Orcamento orcamento) { | |
throw new RuntimeException("Orcamento em aprovação nao pode ir para finalizado!!!"); | |
} | |
} | |
public class Aprovado implements EstadoDeUmOrcamento { | |
public void aplicaDescontoExtra(Orcamento orcamento) { | |
orcamento.valor -= orcamento.valor * conceDesconto(0.02); | |
} | |
public double conceDesconto(double desconto){ | |
if(desconto!=0.02){ | |
throw new RuntimeException("So pode ser concedido desconto de 2 porcento"); | |
} | |
return desconto; | |
} | |
public void aprova(Orcamento orcamento) { | |
throw new RuntimeException("Orçamento aprovado!!"); | |
} | |
public void reprova(Orcamento orcamento) { | |
throw new RuntimeException("Orcamento aprovado não pode ser reprovado!!"); | |
} | |
public void finaliza(Orcamento orcamento) { | |
orcamento.estadoAtual = new Finalizado(); | |
} | |
} | |
public class Orcamento { | |
protected double valor; | |
protected EstadoDeUmOrcamento estadoAtual; | |
public Orcamento(double valor){ | |
this.estadoAtual = new EmAprovacao(); | |
this.valor = valor; | |
} | |
public void aplicaDescontoExtra(){ | |
estadoAtual.aplicaDescontoExtra(this); | |
} | |
public void aprova(){ | |
estadoAtual.aprova(this); | |
} | |
public void reprova(){ | |
estadoAtual.reprova(this); | |
} | |
public void finaliza(){ | |
estadoAtual.finaliza(this); | |
} | |
public double getValor(){ | |
return valor; | |
} | |
} | |
public class TestaDescontoExtra { | |
public static void main(String[] args) { | |
Orcamento reforma = new Orcamento(500.0); | |
reforma.aplicaDescontoExtra(); | |
System.out.println(reforma.getValor()); // imprime 475,00 pois descontou 5% | |
reforma.aprova(); // aprova nota! | |
reforma.aplicaDescontoExtra(); | |
System.out.println(reforma.getValor()); // imprime 465,50 pois descontou 2% | |
reforma.finaliza(); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment