Skip to content

Instantly share code, notes, and snippets.

public class DescontoPorMaisDeCincoItens {
public double desconta(Orcamento orcamento) {
if(orcamento.getItens().size > 5) {
return orcamento.getValor() * 0.1;
}
return 0;
}
public interface Desconto {
double desconta(Orcamento orcamento);
}
public interface Desconto {
double desconta(Orcamento orcamento);
void setProximo(Desconto proximo);
}
public 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) {
public class SemDesconto implements Desconto {
public double desconta(Orcamento orcamento) {
return 0;
}
public void setProximo(Desconto desconto) {
// nao tem!
}
public class CalculadorDeDescontos {
public double calcula(Orcamento orcamento) {
Desconto descontoPorMaisDeCincoItens = new DescontoPorMaisDeCincoItens();
Desconto descontoPorMaisDeQuinhentosReais = new DescontoPorMaisDeQuinhentosReais();
Desconto semDesconto = new SemDesconto();
descontoPorMaisDeCincoItens.setProximo(descontoPorMaisDeQuinhentosReais);
descontoPorMaisDeQuinhentosReais.setProximo(semDesconto);
public class DescontoPorVendaCasada implements Desconto {
private Desconto proximo;
public double desconta(Orcamento orcamento) {
if(aconteceuVendaCasadaEm(orcamento)) {
return orcamento.getValor() * 0.05;
}
return proximo.desconta(orcamento);
public class CalculadorDeDescontos {
public double calcula(Orcamento orcamento) {
Desconto descontoPorMaisDeCincoItens = new DescontoPorMaisDeCincoItens();
Desconto descontoPorMaisDeQuinhentosReais = new DescontoPorMaisDeQuinhentosReais();
Desconto descontoPorVendaCasada = new DescontoPorVendaCasada();
Desconto semDesconto = new SemDesconto();
descontoPorMaisDeCincoItens.setProximo(descontoPorMaisDeQuinhentosReais);
descontoPorMaisDeQuinhentosReais.setProximo(descontoPorMaisDeQuinhentosReais);
public abstract class TemplateDeImpostoCondicional implements Imposto {
public double calcula(Orcamento orcamento) {
if(deveUsarMaximaTaxacao(orcamento)) {
return maximaTaxacao(orcamento);
} else {
return minimaTaxacao(orcamento);
}
}
class ICPP extends TemplateDeImpostoCondicional {
public boolean deveUsarMaximaTaxacao(Orcamento orcamento) {
return orcamento.getValor() > 500;
}
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor() * 0.07;
}