Skip to content

Instantly share code, notes, and snippets.

@alexduarte
Created December 21, 2011 04:47
Show Gist options
  • Save alexduarte/1504634 to your computer and use it in GitHub Desktop.
Save alexduarte/1504634 to your computer and use it in GitHub Desktop.
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