Pular para o conteúdo
Bruno Dórea
Todos os posts

6 mins de leitura


Implementando um Carrinho de Compras com Padrão Strategy

Desafios de Código Java Intermediários - Design Patterns - 4/5


Java AI Powered
Java AI Powered

Descrição

Você está desenvolvendo um sistema simples de carrinho de compras. O desafio é implementar a funcionalidade de calcular o total da compra, permitindo que o usuário escolha entre diferentes estratégias de desconto, utilizando o padrão de projeto Strategy.

Entrada

O programa deve permitir que o usuário adicione produtos ao carrinho, informando o nome e o preço de cada produto. Em seguida, o usuário deve escolher a estratégia de desconto desejada entre duas opções: 10% de desconto ou frete grátis.

Saída

O programa deve calcular e exibir o total da compra com base na estratégia de desconto escolhida.

Exemplos

A tabela abaixo apresenta exemplos com alguns dados de entrada e suas respectivas saídas esperadas. Certifique-se de testar seu programa com esses exemplos e com outros casos possíveis.

EntradaSaída
Livro
45Total da compra: R$40.5
1
EntradaSaída
Air FryerFrete gratis aplicado
200Total da compra: R$200.0
2
EntradaSaída
Celular
1000Total da compra: R$900.0
1

Resolução

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
interface DiscountStrategy {
    double applyDiscount(double total);
}
 
class TenPercentDiscount implements DiscountStrategy {
    @Override
    public double applyDiscount(double total) {
        return total * 0.9;
    }
}
 
class FreeShipping implements DiscountStrategy {
    @Override
    public double applyDiscount(double total) {
        System.out.println("Frete gratis aplicado");
        return total;
    }
}
 
class ShoppingCart {
    private List<Double> products = new ArrayList<>();
    private DiscountStrategy discountStrategy;
 
    public void addProduct(double price) {
        products.add(price);
    }
 
    public void setDiscountStrategy(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }
 
    public double calculateTotal() {
        double total = 0.0;
        for (Double price : products) {
            total += price;
        }
        return discountStrategy.applyDiscount(total);
    }
}
 
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        DiscountStrategy tenPercentDiscount = new TenPercentDiscount();
        DiscountStrategy freeShipping = new FreeShipping();
 
        ShoppingCart cart = new ShoppingCart();
 
        String productName = scanner.nextLine();
        double productPrice = scanner.nextDouble();
        cart.addProduct(productPrice);
 
        int strategyChoice = scanner.nextInt();
        switch (strategyChoice) {
            case 1:
                cart.setDiscountStrategy(tenPercentDiscount);
                break;
            case 2:
                cart.setDiscountStrategy(freeShipping);
                break;
            default:
                System.out.println("Escolha invalida. Nenhum desconto aplicado.");
        }
 
        double total = cart.calculateTotal();
        System.out.println("Total da compra: R$" + total);
    }
}

Para encontrar outras soluções, verifique aqui.

Caso encontre algum erro ou tenha sugestões, clique aqui e abra uma issue no Github.