Skip to content

Instantly share code, notes, and snippets.

@alexduarte
Created December 19, 2011 12:55
Show Gist options
  • Save alexduarte/1497102 to your computer and use it in GitHub Desktop.
Save alexduarte/1497102 to your computer and use it in GitHub Desktop.
<code>
public class CalculadorDeDescontos {
public double calculaDesconto(Orcamento orcamento){
DescontaPorCincoItens d1 = new DescontaPorCincoItens();
DescontaPorMaisDeQuinhentosReais d2 = new DescontaPorMaisDeQuinhentosReais();
//DescontaPorVendaCasada d3 = new DescontaPorVendaCasada();
SemDesconto d3 = new SemDesconto();
d1.setProximo(d2);
d2.setProximo(d3);
//d3.setProximo(d4);
return d1.desconta(orcamento);
}
}
public class DescontaPorCincoItens implements Desconto {
private Desconto proximo;
public double desconta(Orcamento orcamento) {
if(orcamento.getItens().size()>5){
return orcamento.getValor()*0.1;
}
else{
return proximo.desconta(orcamento);
}
}
public void setProximo(Desconto proximo) {
this.proximo = proximo;
}
}
public class DescontaPorMaisDeQuinhentosReais implements Desconto {
private Desconto proximo;
public void setProximo(Desconto proximo) {
this.proximo = proximo;
}
public double desconta(Orcamento orcamento) {
if(orcamento.getValor()>500.00){
return orcamento.getValor()*0.07;
}
else {
return proximo.desconta(orcamento);
}
}
}
public interface Desconto {
double desconta(Orcamento orcamento);
void setProximo(Desconto proximo);
}
public class Item {
private String nome;
private double valor;
public Item(String nome, double valor){
this.nome = nome;
this.valor = valor;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
}
import java.util.Collections;
public class Orcamento {
private double valor;
private java.util.List<Item> itens;
public Orcamento(double valor){
this.valor = valor;
}
public java.util.List<Item> getItens() {
return Collections.unmodifiableList(itens);
}
public void adcionaItem(Item item){
itens.add(item);
}
public void setItens(java.util.List<Item> itens) {
this.itens = itens;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
}
public class SemDesconto implements Desconto {
public double desconta(Orcamento orcamento) {
return 0;
}
public void setProximo(Desconto proximo) {
// sem desconto
}
}
public class TestaDescontos {
public static void main(String[] args) {
CalculadorDeDescontos calculador = new CalculadorDeDescontos();
Orcamento orcamento = new Orcamento(1000.00);
orcamento.adcionaItem(new Item("Lapis", 350.00));
orcamento.adcionaItem(new Item("Caneta", 350.00));
orcamento.adcionaItem(new Item("Papel", 200.00));
double desconto = calculador.calculaDesconto(orcamento);
System.out.println(desconto);
}
}
<code>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment