import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Orcamento.java
class Orcamento {
private double valor;
private List<Item> itens;
public Orcamento(double valor) {
this.valor = valor;
this.itens = new ArrayList<Item>();
}
public double getValor() {
return valor;
}
public List<Item> getItens() {
return Collections.unmodifiableList(itens);
}
public void adicionaItem(Item item) {
itens.add(item);
}
}
Item.java
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 double getValor() {
return valor;
}
}
Desconto.java
interface Desconto {
double desconta(Orcamento orcamento);
void setProximo(Desconto proximo);
}
SemDesconto.java
class SemDesconto implements Desconto {
public double desconta(Orcamento orcamento) {
return 0;
}
public void setProximo(Desconto desconto) {
// nao tem!
}
}
DescontoPorMaisDeCincoItens.java
class DescontoPorMaisDeCincoItens implements Desconto {
private Desconto proximo;
public void setProximo(Desconto proximo) {
this.proximo = proximo;
}
public double desconta(Orcamento orcamento) {
if (orcamento.getItens().size() > 5) {
return orcamento.getValor() * 0.1;
} else {
return proximo.desconta(orcamento);
}
}
}
DescontoPorMaisDeQuinhentosReais.java
class DescontoPorMaisDeQuinhentosReais implements Desconto {
private Desconto proximo;
public void setProximo(Desconto proximo) {
this.proximo = proximo;
}
public double desconta(Orcamento orcamento) {
if (orcamento.getValor() > 500) {
return orcamento.getValor() * 0.07;
} else {
return proximo.desconta(orcamento);
}
}
}
CalculadorDeDescontos.java
class CalculadorDeDescontos {
public double calcula(Orcamento orcamento) {
Desconto d1 = new DescontoPorMaisDeCincoItens();
Desconto d2 = new DescontoPorMaisDeQuinhentosReais();
Desconto d3 = new SemDesconto();
d1.setProximo(d2);
d2.setProximo(d3);
return d1.desconta(orcamento);
}
}
Principal.java
public class Chain {
public static void main(String[] args) {
CalculadorDeDescontos calculador = new CalculadorDeDescontos();
Orcamento orcamento = new Orcamento(600.0);
orcamento.adicionaItem(new Item("CANETA", 250.0));
orcamento.adicionaItem(new Item("LAPIS", 250.0));
double desconto = calculador.calcula(orcamento);
System.out.println(desconto);
}
}