Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions src/exemplo/desafio/LojaOnline.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package exemplo.desafio;

import exemplo.desafio.interfaces.MetodoEnvio;
import exemplo.desafio.interfaces.MetodoPagamento;
import exemplo.desafio.model.*;
import exemplo.desafio.service.ProcessadorPagamento;
import exemplo.desafio.service.ServicoEnvio;

import java.util.Arrays;
import java.util.List;

public class LojaOnline {
public static void main(String[] args) {
// Serviços
ProcessadorPagamento processador = new ProcessadorPagamento();
ServicoEnvio servicoEnvio = new ServicoEnvio();

// Estrategias
MetodoPagamento pagamentoCartao = new CartaoCredito();
MetodoPagamento pagamentoPayPal = new PayPal();
MetodoEnvio envioSedex = new Sedex();

// Pedido 1 : Pago com Cartao de Credito
List<Item> itensPedido1 = Arrays.asList(
new Item("Produto A", 50.0, 2, 0.5),
new Item("Produto B", 30.0, 1, 0.2)
);
Pedido pedido1 = new Pedido(itensPedido1, pagamentoCartao, envioSedex);

System.out.printf("Total do pedido 1: R$%.2f%n", pedido1.calcularTotal());
System.out.println("Status inicial: " + pedido1.getStatus());

processador.processar(pedido1);
System.out.println("Status após pagamento: " + pedido1.getStatus());

servicoEnvio.enviarPedido(pedido1);
System.out.println("Status final: " + pedido1.getStatus());

System.out.println("\n" + "=".repeat(30) + "\n");

List<Item> itensPedido2 = Arrays.asList(
new Item("Produto C", 120.0, 1, 1.2)
);
Pedido pedido2 = new Pedido(itensPedido2, pagamentoPayPal, envioSedex);

System.out.printf("Total do pedido 2: R$%.2f%n", pedido2.calcularTotal());
System.out.println("Status inicial: " + pedido2.getStatus());

processador.processar(pedido2);
System.out.println("Status apos pagamento: " + pedido2.getStatus());

servicoEnvio.enviarPedido(pedido2);
System.out.println("Status final: " + pedido2.getStatus());
}
}
7 changes: 7 additions & 0 deletions src/exemplo/desafio/interfaces/MetodoEnvio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package exemplo.desafio.interfaces;

import exemplo.desafio.model.Pedido;

public interface MetodoEnvio {
double calcularCustoEnvio(Pedido pedido);
}
5 changes: 5 additions & 0 deletions src/exemplo/desafio/interfaces/MetodoPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package exemplo.desafio.interfaces;

public interface MetodoPagamento {
boolean processarPagamento(double valor);
}
11 changes: 11 additions & 0 deletions src/exemplo/desafio/model/CartaoCredito.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package exemplo.desafio.model;

import exemplo.desafio.interfaces.MetodoPagamento;

public class CartaoCredito implements MetodoPagamento {
@Override
public boolean processarPagamento(double valor) {
System.out.printf("Processando R$%.2f com Cartão de Crédito.%n", valor);
return true;
}
}
27 changes: 27 additions & 0 deletions src/exemplo/desafio/model/Item.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package exemplo.desafio.model;

public class Item {
private String nome;
private double preco;
private int quantidade;
private double peso;

public Item(String nome, double preco, int quantidade, double peso) {
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
this.peso = peso;
}

public double getPreco() {
return preco;
}

public int getQuantidade() {
return quantidade;
}

public double getPeso() {
return peso;
}
}
11 changes: 11 additions & 0 deletions src/exemplo/desafio/model/PayPal.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package exemplo.desafio.model;

import exemplo.desafio.interfaces.MetodoPagamento;

public class PayPal implements MetodoPagamento {
@Override
public boolean processarPagamento(double valor) {
System.out.printf("Processando R$%.2f com PayPal.%n", valor);
return true;
}
}
46 changes: 46 additions & 0 deletions src/exemplo/desafio/model/Pedido.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package exemplo.desafio.model;

import exemplo.desafio.interfaces.MetodoEnvio;
import exemplo.desafio.interfaces.MetodoPagamento;

import java.util.List;

public class Pedido {
private List<Item> itens;
private String status;
private MetodoPagamento metodoPagamento;
private MetodoEnvio metodoEnvio;

public Pedido(List<Item> itens, MetodoPagamento metodoPagamento, MetodoEnvio metodoEnvio) {
this.itens = itens;
this.status = "Pendente";
this.metodoPagamento = metodoPagamento;
this.metodoEnvio = metodoEnvio;
}

public double calcularTotal() {
return itens.stream()
.mapToDouble(item -> item.getPreco() * item.getQuantidade())
.sum();
}

public double calcularCustoEnvio() {
return this.metodoEnvio.calcularCustoEnvio(this);
}

public MetodoPagamento getMetodoPagamento() {
return metodoPagamento;
}

public List<Item> getItens() {
return itens;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}
}
16 changes: 16 additions & 0 deletions src/exemplo/desafio/model/Sedex.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package exemplo.desafio.model;

import exemplo.desafio.interfaces.MetodoEnvio;

public class Sedex implements MetodoEnvio {

@Override
public double calcularCustoEnvio(Pedido pedido) {
double pesoTotal = 0;
for (Item item : pedido.getItens()) {
pesoTotal += item.getPeso() * item.getQuantidade();
}
// Exemplo simples de cálculo de frete
return pesoTotal * 2.5;
}
}
17 changes: 17 additions & 0 deletions src/exemplo/desafio/service/ProcessadorPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package exemplo.desafio.service;

import exemplo.desafio.model.Pedido;

public class ProcessadorPagamento {
public void processar(Pedido pedido) {
double total = pedido.calcularTotal();
boolean sucesso = pedido.getMetodoPagamento().processarPagamento(total);
if (sucesso) {
pedido.setStatus("Pago");
System.out.println("Pagamento aprovado.");
} else {
pedido.setStatus("Falha no Pagamento");
System.out.println("Pagamento recusado.");
}
}
}
15 changes: 15 additions & 0 deletions src/exemplo/desafio/service/ServicoEnvio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package exemplo.desafio.service;

import exemplo.desafio.model.Pedido;

public class ServicoEnvio {
public void enviarPedido(Pedido pedido) {
if ("Pago".equals(pedido.getStatus())) {
double custoEnvio = pedido.calcularCustoEnvio();
System.out.printf("Pedido enviado. Custo do envio: R$%.2f%n", custoEnvio);
pedido.setStatus("Enviado");
} else {
System.out.println("Não é possível enviar o pedido antes do pagamento.");
}
}
}