1
resposta

Duvida exercicio venda casada

No exercicio é solicitado criar UMA estratégia caso tivermos na mesma compra LAPIS e CANETA.

Essa implementação está correta ?

@Override
    public double desconto(Orcamento orcamento) {
        int counter = 0;
        String comparatorOne = "CANETA";
        String comparatorTwo = "LAPIS";

        for (Item item : orcamento.getItems()) {
            if (item.getNome().contains(comparatorOne) || item.getNome().contains(comparatorTwo)) {
                counter++;
            }
        }

        if (counter == 2) {
            return orcamento.getValor() * 0.05;
        }

        return 0;
    }
1 resposta

Oi Jeferson, tudo bem?

É uma alternativa, seu código funciona. Mas seguindo o design pattern você teria uma implementação DescontoPorVendaCasada:

 public class DescontoPorVendaCasada implements Desconto {

        private Desconto proximo;

        public double desconta(Orcamento orcamento) {
            if(aconteceuVendaCasadaEm(orcamento)) return orcamento.getValor() * 0.05;
            else return proximo.desconta(orcamento);
        }

        private boolean aconteceuVendaCasadaEm(Orcamento orcamento) {
            return existe("CANETA", orcamento) && existe("LAPIS", orcamento);
        }

        private boolean existe(String nomeDoItem, Orcamento orcamento) {
            for (Item item : orcamento.getItens()) {
                if(item.getNome().equals(nomeDoItem)) return true;
            }
            return false;
        }

        public void setProximo(Desconto proximo) {
            this.proximo = proximo;
        }

    }

    public class TestaCorrente {
      public static void main(String[] args) {
        Desconto d1 = new DescontoPorCincoItens();
        Desconto d2 = new DescontoPorMaisDeQuinhentosReais();
        Desconto d3 = new DescontoPorVendaCasada();
        Desconto d4 = new SemDesconto();

        d1.setProximo(d2);
        d2.setProximo(d3);
        d3.setProximo(d4);

    Item lapis = new Item("LAPIS", 15.00);
        Item caneta = new Item("CANETA", 15.00);
        Item borracha = new Item("borracha", 15.00);

        Orcamento orcamento = new Orcamento(500.0);
        orcamento.adiciona(caneta);
        orcamento.adiciona(borracha);
        orcamento.adiciona(lapis);        

        double desconto = d1.desconta(orcamento);
        System.out.println(desconto);
      }
    }