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
18 changes: 18 additions & 0 deletions src/Desafio3/loja/envio/EnvioCorreios.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Desafio3.loja.envio;

import Desafio3.loja.interfaces.CalculadorFrete;
import Desafio3.loja.interfaces.ServicoEnvio;
import Desafio3.loja.model.Pedido;

public class EnvioCorreios implements ServicoEnvio, CalculadorFrete {
@Override
public boolean enviarPedido(Pedido pedido) {
System.out.println("Enviando pedido " + pedido.getId() + " via Correios");
return true;
}

@Override
public double calcularFrete(String cep) {
return 15.0;
}
}
17 changes: 17 additions & 0 deletions src/Desafio3/loja/envio/EnvioDrone.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package Desafio3.loja.envio;

import Desafio3.loja.interfaces.CalculadorFrete;
import Desafio3.loja.interfaces.ServicoEnvio;
import Desafio3.loja.model.Pedido;

public class EnvioDrone implements ServicoEnvio, CalculadorFrete {
@Override
public boolean enviarPedido(Pedido pedido) {
System.out.println("Enviando pedido " + pedido.getId() + " via Drone");
return true;
}

public double calcularFrete(String cep) {
return 50.0;
}
}
18 changes: 18 additions & 0 deletions src/Desafio3/loja/envio/EnvioTransportadora.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Desafio3.loja.envio;

import Desafio3.loja.interfaces.CalculadorFrete;
import Desafio3.loja.interfaces.ServicoEnvio;
import Desafio3.loja.model.Pedido;

public class EnvioTransportadora implements ServicoEnvio, CalculadorFrete {
@Override
public boolean enviarPedido(Pedido pedido) {
System.out.println("Enviando pedido " + pedido.getId() + " via Transportadora");
return true;
}

@Override
public double calcularFrete(String cep) {
return cep.startsWith("0") ? 20.0 : 25.0;
}
}
5 changes: 5 additions & 0 deletions src/Desafio3/loja/interfaces/CalculadorDesconto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package Desafio3.loja.interfaces;

public interface CalculadorDesconto {
double calcularDesconto(double valor);
}
5 changes: 5 additions & 0 deletions src/Desafio3/loja/interfaces/CalculadorFrete.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package Desafio3.loja.interfaces;

public interface CalculadorFrete {
double calcularFrete(String cep);
}
5 changes: 5 additions & 0 deletions src/Desafio3/loja/interfaces/NotificadorCliente.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package Desafio3.loja.interfaces;

public interface NotificadorCliente {
void notificarCliente(String mensagem);
}
5 changes: 5 additions & 0 deletions src/Desafio3/loja/interfaces/ProcessadorPagamento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package Desafio3.loja.interfaces;

public interface ProcessadorPagamento {
boolean processarPagamento(double valor);
}
7 changes: 7 additions & 0 deletions src/Desafio3/loja/interfaces/ServicoEnvio.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package Desafio3.loja.interfaces;

import Desafio3.loja.model.Pedido;

public interface ServicoEnvio {
boolean enviarPedido(Pedido pedido);
}
80 changes: 80 additions & 0 deletions src/Desafio3/loja/main/SistemaLojaOnline.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package Desafio3.loja.main;

import Desafio3.loja.envio.EnvioCorreios;
import Desafio3.loja.envio.EnvioTransportadora;
import Desafio3.loja.model.Pedido;
import Desafio3.loja.notificacao.NotificadorEmail;
import Desafio3.loja.notificacao.NotificadorSMS;
import Desafio3.loja.notificacao.NotificadorWhatsApp;
import Desafio3.loja.pagamento.PagamentoBoleto;
import Desafio3.loja.pagamento.PagamentoCartaoCredito;
import Desafio3.loja.pagamento.PagamentoPix;
import Desafio3.loja.service.GerenciadorPedidos;

import java.util.List;

public class SistemaLojaOnline {
public static void main(String[] args) {
System.out.println("=== SISTEMA DE GERENCIAMENTO DE PEDIDOS - APLICANDO SOLID ===");

System.out.println("CENÁRIO 1: CARTÃO + CORREIOS + EMAIL");

GerenciadorPedidos gerenciador1 = new GerenciadorPedidos(
new PagamentoCartaoCredito(),
new EnvioCorreios(),
new NotificadorEmail(),
new EnvioCorreios()
);

List<String> itens1 = List.of("Notebook", "Mouse", "Teclado");
Pedido pedido1 = new Pedido("001", itens1, 2500.0, "01234-567");

gerenciador1.criarPedidos(pedido1);
gerenciador1.enviarPedido("001");
gerenciador1.listarPedidos();

System.out.println("\nCENÁRIO 2: PIX + TRANSPORTADORA + WHATSAPP");

GerenciadorPedidos gerenciador2 = new GerenciadorPedidos(
new PagamentoPix(),
new EnvioTransportadora(),
new NotificadorWhatsApp(),
new EnvioTransportadora()
);

List<String> itens2 = List.of("Smartphone", "Capinha", "Carregador");
Pedido pedido2 = new Pedido("002", itens2, 1200.0, "12345-678");

gerenciador2.criarPedidos(pedido2);
gerenciador2.enviarPedido("002");
gerenciador2.listarPedidos();

System.out.println("\n CENÁRIO 3: BOLETO + CORREIOS + SMS ");

GerenciadorPedidos gerenciador3 = new GerenciadorPedidos(
new PagamentoBoleto(),
new EnvioCorreios(),
new NotificadorSMS(),
new EnvioCorreios()
);
List<String> itens3 = List.of("Livro Java", "Curso Online");
Pedido pedido3 = new Pedido("003", itens3, 150.0, "87654-321");

gerenciador3.criarPedidos(pedido3);
gerenciador3.enviarPedido("003");
gerenciador3.listarPedidos();


System.out.println("\n DEMONSTRANDO EXTENSIBILIDADE (OCP): ");
System.out.println("Novos métodos de pagamento podem ser adicionados sem modificar código existente");
System.out.println("Novos serviços de envio podem ser implementados independentemente");
System.out.println("Novos tipos de de notificação são plug-and-play");

System.out.println("\n PRINCÍPIOS SOLID APLICADOS: ");
System.out.println("SRP: Cada Classe tem uma responsabilidade específica");
System.out.println("OCP: Sistema aberto para extensão, fechado para modificação");
System.out.println("LSP: Implementações podem ser substituídas sem quebrar o sistema");
System.out.println("ISP: Interfaces pequenas e focadas");
System.out.println("DIP: Dependemos de abstrações, não de implementações");
}
}
57 changes: 57 additions & 0 deletions src/Desafio3/loja/model/Pedido.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package Desafio3.loja.model;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

public class Pedido {
private String id;
private List<String> itens;
private double valorTotal;
private String status;
private LocalDateTime dataHora;
private String cepDestino;

public Pedido(String id, List<String> itens, double valorTotal, String cepDestino) {
this.id = id;
this.itens = new ArrayList<>(itens);
this.valorTotal = valorTotal;
this.status = "CRIADO";
this.dataHora = LocalDateTime.now();
this.cepDestino = cepDestino;
}

public String getId() {
return id;
}

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

public double getValorTotal() {
return valorTotal;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public LocalDateTime getDataHora() {
return dataHora;
}

public String getCepDestino() {
return cepDestino;
}

@Override
public String toString() {
return String.format("Pedido{id='%s', itens=%s, valor=%.2f, status='%s'}",
id, itens, valorTotal, status);
}
}
10 changes: 10 additions & 0 deletions src/Desafio3/loja/notificacao/NotificadorEmail.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package Desafio3.loja.notificacao;

import Desafio3.loja.interfaces.NotificadorCliente;

public class NotificadorEmail implements NotificadorCliente {
@Override
public void notificarCliente(String mensagem) {
System.out.println("Email enviado: " + mensagem);
}
}
10 changes: 10 additions & 0 deletions src/Desafio3/loja/notificacao/NotificadorPush.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package Desafio3.loja.notificacao;

import Desafio3.loja.interfaces.NotificadorCliente;

public class NotificadorPush implements NotificadorCliente {
@Override
public void notificarCliente(String mensagem) {
System.out.println("Push Notification: " + mensagem);
}
}
10 changes: 10 additions & 0 deletions src/Desafio3/loja/notificacao/NotificadorSMS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package Desafio3.loja.notificacao;

import Desafio3.loja.interfaces.NotificadorCliente;

public class NotificadorSMS implements NotificadorCliente {
@Override
public void notificarCliente(String mensagem) {
System.out.println("SMS enviado: " + mensagem);
}
}
10 changes: 10 additions & 0 deletions src/Desafio3/loja/notificacao/NotificadorWhatsApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package Desafio3.loja.notificacao;

import Desafio3.loja.interfaces.NotificadorCliente;

public class NotificadorWhatsApp implements NotificadorCliente {
@Override
public void notificarCliente(String mensagem) {
System.out.println("Whatsapp enviado: " + mensagem);
}
}
17 changes: 17 additions & 0 deletions src/Desafio3/loja/pagamento/PagamentoBoleto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package Desafio3.loja.pagamento;

import Desafio3.loja.interfaces.CalculadorDesconto;
import Desafio3.loja.interfaces.ProcessadorPagamento;

public class PagamentoBoleto implements ProcessadorPagamento, CalculadorDesconto {
@Override
public boolean processarPagamento(double valor) {
System.out.println("Gerando Boleto para pagamento: R$" + valor);
return true;
}

@Override
public double calcularDesconto(double valor) {
return valor * 0.03;
}
}
17 changes: 17 additions & 0 deletions src/Desafio3/loja/pagamento/PagamentoCartaoCredito.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package Desafio3.loja.pagamento;

import Desafio3.loja.interfaces.CalculadorDesconto;
import Desafio3.loja.interfaces.ProcessadorPagamento;

public class PagamentoCartaoCredito implements ProcessadorPagamento, CalculadorDesconto {
@Override
public boolean processarPagamento(double valor) {
System.out.println("Processando pagamento cartão de credito: R$ " + valor);
return valor > 0;
}

@Override
public double calcularDesconto(double valor) {
return valor * 0.02;
}
}
18 changes: 18 additions & 0 deletions src/Desafio3/loja/pagamento/PagamentoCriptomoeda.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Desafio3.loja.pagamento;

import Desafio3.loja.interfaces.CalculadorDesconto;
import Desafio3.loja.interfaces.ProcessadorPagamento;

public class PagamentoCriptomoeda implements ProcessadorPagamento, CalculadorDesconto {
@Override
public boolean processarPagamento(double valor) {
System.out.println("Processando pagamento em criptomoeda: R$ " + valor);
return true;

}

@Override
public double calcularDesconto(double valor) {
return valor * 0.08;
}
}
17 changes: 17 additions & 0 deletions src/Desafio3/loja/pagamento/PagamentoPix.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package Desafio3.loja.pagamento;

import Desafio3.loja.interfaces.CalculadorDesconto;
import Desafio3.loja.interfaces.ProcessadorPagamento;

public class PagamentoPix implements ProcessadorPagamento, CalculadorDesconto {
@Override
public boolean processarPagamento(double valor) {
System.out.println("Processando pagamento via PIX: R$ " + valor);
return valor > 0;
}

@Override
public double calcularDesconto(double valor) {
return valor * 0.05;
}
}
Loading