Created
January 12, 2022 17:16
Revisions
-
walteralleyz created this gist
Jan 12, 2022 .There are no files selected for viewing
This file contains hidden or 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,76 @@ interface Desconto { BigDecimal calcular(Pedido pedido); void setProximo(Desconto proximo); } class DescontoPorItens implements Desconto { private Desconto proximo; @Override public BigDecimal calcular(Pedido pedido) { if(pedido.getItens().size() > 10) { return pedido.getValor().multiply(BigDecimal.valueOf(0.5)); } else { return proximo.calcular(pedido); } } @Override public void setProximo(Desconto proximo) { this.proximo = proximo; } } class DescontoPorValor implements Desconto { private Desconto proximo; @Override public BigDecimal calcular(Pedido pedido) { if(pedido.getValor() > 1000.0) { return pedido.getValor().multiply(BigDecimal.valueOf(0.10)); } else { return proximo.calcular(pedido); } } @Override public void setProximo(Desconto proximo) { this.proximo = proximo; } } class SemDesconto implements Desconto { @Override public BigDecimal calcular(Pedido pedido) { return BigDecimal.ZERO; } @Override public void setProximo(Desconto desconto) { // Não faz nada, é o último nível } } class CalculadorDeDesconto { public static void main(String[] args) { final Pedido pedido = new Pedido; calculaDesconto(pedido); } public BigDecimal calculaDesconto(Pedido pedido) { final Desconto descontoPorItem = new DescontoPorItens(); final Desconto descontoPorValor = new DescontoPorValor(); final Desconto semDesconto = new SemDesconto(); descontoPorItem.setProximo(descontoPorValor); descontoPorValor.setProximo(semDesconto); return descontoPorItem.calcular(pedido); } }