├── out └── production │ └── loja │ ├── TestesPedidos.class │ ├── impostos │ ├── ICMS.class │ ├── ISS.class │ ├── Imposto.class │ └── CalculadoraDeImpostos.class │ ├── pedido │ ├── Pedido.class │ ├── GeraPedido.class │ ├── GeraPedidoHandler.class │ └── acao │ │ ├── AcaoAposGerarPedido.class │ │ ├── EnviarEmailPedido.class │ │ └── SalvarPedidoNoBancoDeDados.class │ ├── TestesDescontos.class │ ├── TestesImpostos.class │ ├── descontos │ ├── Desconto.class │ ├── SemDesconto.class │ ├── CalculadoraDeDescontos.class │ ├── DescontoParaOrcamentoComMaisDeCincoItens.class │ └── DescontoParaOrcamentoComValorMaiorQueQuinhetos.class │ └── orcamento │ ├── Orcamento.class │ └── situacao │ ├── Aprovado.class │ ├── EmAnalise.class │ ├── Reprovado.class │ ├── Finalizado.class │ ├── DomainException.class │ └── SituacaoOrcamento.class ├── src ├── pedido │ ├── acao │ │ ├── AcaoAposGerarPedido.java │ │ ├── EnviarEmailPedido.java │ │ └── SalvarPedidoNoBancoDeDados.java │ ├── GeraPedido.java │ ├── GeraPedidoHandler.java │ └── Pedido.java ├── orcamento │ ├── situacao │ │ ├── Finalizado.java │ │ ├── DomainException.java │ │ ├── Reprovado.java │ │ ├── Aprovado.java │ │ ├── EmAnalise.java │ │ └── SituacaoOrcamento.java │ └── Orcamento.java ├── impostos │ ├── Imposto.java │ ├── ICMS.java │ ├── ISS.java │ └── CalculadoraDeImpostos.java ├── descontos │ ├── SemDesconto.java │ ├── CalculadoraDeDescontos.java │ ├── DescontoParaOrcamentoComMaisDeCincoItens.java │ ├── Desconto.java │ └── DescontoParaOrcamentoComValorMaiorQueQuinhetos.java ├── TestesImpostos.java ├── TestesDescontos.java └── TestesPedidos.java └── loja.iml /out/production/loja/TestesPedidos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/TestesPedidos.class -------------------------------------------------------------------------------- /out/production/loja/impostos/ICMS.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/impostos/ICMS.class -------------------------------------------------------------------------------- /out/production/loja/impostos/ISS.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/impostos/ISS.class -------------------------------------------------------------------------------- /out/production/loja/pedido/Pedido.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/pedido/Pedido.class -------------------------------------------------------------------------------- /out/production/loja/TestesDescontos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/TestesDescontos.class -------------------------------------------------------------------------------- /out/production/loja/TestesImpostos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/TestesImpostos.class -------------------------------------------------------------------------------- /out/production/loja/impostos/Imposto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/impostos/Imposto.class -------------------------------------------------------------------------------- /out/production/loja/descontos/Desconto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/descontos/Desconto.class -------------------------------------------------------------------------------- /out/production/loja/pedido/GeraPedido.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/pedido/GeraPedido.class -------------------------------------------------------------------------------- /out/production/loja/descontos/SemDesconto.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/descontos/SemDesconto.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/Orcamento.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/Orcamento.class -------------------------------------------------------------------------------- /out/production/loja/pedido/GeraPedidoHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/pedido/GeraPedidoHandler.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/situacao/Aprovado.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/situacao/Aprovado.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/situacao/EmAnalise.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/situacao/EmAnalise.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/situacao/Reprovado.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/situacao/Reprovado.class -------------------------------------------------------------------------------- /out/production/loja/impostos/CalculadoraDeImpostos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/impostos/CalculadoraDeImpostos.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/situacao/Finalizado.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/situacao/Finalizado.class -------------------------------------------------------------------------------- /out/production/loja/pedido/acao/AcaoAposGerarPedido.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/pedido/acao/AcaoAposGerarPedido.class -------------------------------------------------------------------------------- /out/production/loja/pedido/acao/EnviarEmailPedido.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/pedido/acao/EnviarEmailPedido.class -------------------------------------------------------------------------------- /out/production/loja/descontos/CalculadoraDeDescontos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/descontos/CalculadoraDeDescontos.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/situacao/DomainException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/situacao/DomainException.class -------------------------------------------------------------------------------- /out/production/loja/orcamento/situacao/SituacaoOrcamento.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/orcamento/situacao/SituacaoOrcamento.class -------------------------------------------------------------------------------- /out/production/loja/pedido/acao/SalvarPedidoNoBancoDeDados.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/pedido/acao/SalvarPedidoNoBancoDeDados.class -------------------------------------------------------------------------------- /src/pedido/acao/AcaoAposGerarPedido.java: -------------------------------------------------------------------------------- 1 | package pedido.acao; 2 | 3 | import pedido.Pedido; 4 | 5 | public interface AcaoAposGerarPedido { 6 | public void executarAcao(Pedido pedido); 7 | } 8 | -------------------------------------------------------------------------------- /src/orcamento/situacao/Finalizado.java: -------------------------------------------------------------------------------- 1 | package orcamento.situacao; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class Finalizado extends SituacaoOrcamento{ 8 | } 9 | -------------------------------------------------------------------------------- /out/production/loja/descontos/DescontoParaOrcamentoComMaisDeCincoItens.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/descontos/DescontoParaOrcamentoComMaisDeCincoItens.class -------------------------------------------------------------------------------- /src/impostos/Imposto.java: -------------------------------------------------------------------------------- 1 | package impostos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public interface Imposto { 8 | BigDecimal calcular(Orcamento orcamento); 9 | } 10 | -------------------------------------------------------------------------------- /out/production/loja/descontos/DescontoParaOrcamentoComValorMaiorQueQuinhetos.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Brunodias101/Design-Patterns-Java/HEAD/out/production/loja/descontos/DescontoParaOrcamentoComValorMaiorQueQuinhetos.class -------------------------------------------------------------------------------- /src/orcamento/situacao/DomainException.java: -------------------------------------------------------------------------------- 1 | package orcamento.situacao; 2 | 3 | public class DomainException extends RuntimeException { 4 | public DomainException(String mensagem) { 5 | super(mensagem); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/pedido/acao/EnviarEmailPedido.java: -------------------------------------------------------------------------------- 1 | package pedido.acao; 2 | 3 | import pedido.Pedido; 4 | 5 | public class EnviarEmailPedido implements AcaoAposGerarPedido { 6 | 7 | public void executarAcao(Pedido pedido){ 8 | System.out.println("Salvando email com dados do pedido!"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/impostos/ICMS.java: -------------------------------------------------------------------------------- 1 | package impostos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class ICMS implements Imposto { 8 | public BigDecimal calcular(Orcamento orcamento) { 9 | return orcamento.getValor().multiply(new BigDecimal("0.1")); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/impostos/ISS.java: -------------------------------------------------------------------------------- 1 | package impostos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class ISS implements Imposto { 8 | public BigDecimal calcular(Orcamento orcamento) { 9 | return orcamento.getValor().multiply(new BigDecimal("0.6")); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/impostos/CalculadoraDeImpostos.java: -------------------------------------------------------------------------------- 1 | package impostos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class CalculadoraDeImpostos { 8 | public BigDecimal calcular(Orcamento orcamento, Imposto imposto) { 9 | return imposto.calcular(orcamento); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/orcamento/situacao/Reprovado.java: -------------------------------------------------------------------------------- 1 | package orcamento.situacao; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class Reprovado extends SituacaoOrcamento{ 8 | public void finalizar(Orcamento orcamento){ 9 | orcamento.setSituacao(new Finalizado()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/pedido/acao/SalvarPedidoNoBancoDeDados.java: -------------------------------------------------------------------------------- 1 | package pedido.acao; 2 | 3 | import pedido.Pedido; 4 | 5 | public class SalvarPedidoNoBancoDeDados implements AcaoAposGerarPedido{ 6 | 7 | public void executarAcao(Pedido pedido){ 8 | System.out.println("Salvando pedido no banco de dados!"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /loja.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/descontos/SemDesconto.java: -------------------------------------------------------------------------------- 1 | package descontos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class SemDesconto extends Desconto { 8 | public SemDesconto() { 9 | super(null); 10 | } 11 | 12 | public BigDecimal efetuarCalculo(Orcamento orcamento) { 13 | return BigDecimal.ZERO; 14 | } 15 | 16 | @Override 17 | public boolean deveAplicar(Orcamento orcamento) { 18 | return true; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/orcamento/situacao/Aprovado.java: -------------------------------------------------------------------------------- 1 | package orcamento.situacao; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class Aprovado extends SituacaoOrcamento{ 8 | public BigDecimal calcularValorDescontoExtra(Orcamento orcamento){ 9 | return orcamento.getValor().multiply(new BigDecimal("0.02")); 10 | } 11 | 12 | @Override 13 | public void finalizar(Orcamento orcamento) { 14 | orcamento.setSituacao(new Finalizado()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/TestesImpostos.java: -------------------------------------------------------------------------------- 1 | import impostos.CalculadoraDeImpostos; 2 | import impostos.ICMS; 3 | import impostos.ISS; 4 | import orcamento.Orcamento; 5 | 6 | import java.math.BigDecimal; 7 | 8 | public class TestesImpostos { 9 | public static void main(String[] args) { 10 | 11 | Orcamento orcamento = new Orcamento( new BigDecimal("100"),1); 12 | CalculadoraDeImpostos calculadora = new CalculadoraDeImpostos(); 13 | System.out.println(calculadora.calcular(orcamento, new ICMS())); 14 | } 15 | } -------------------------------------------------------------------------------- /src/descontos/CalculadoraDeDescontos.java: -------------------------------------------------------------------------------- 1 | package descontos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class CalculadoraDeDescontos { 8 | public BigDecimal calcular(Orcamento orcamento) { 9 | Desconto cadeiaDeDescontos = new DescontoParaOrcamentoComMaisDeCincoItens( 10 | new DescontoParaOrcamentoComMaisDeCincoItens( 11 | new SemDesconto())); 12 | return cadeiaDeDescontos.calcular(orcamento); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/orcamento/situacao/EmAnalise.java: -------------------------------------------------------------------------------- 1 | package orcamento.situacao; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class EmAnalise extends SituacaoOrcamento{ 8 | public BigDecimal calcularValorDescontoExtra(Orcamento orcamento){ 9 | return orcamento.getValor().multiply(new BigDecimal("0.05")); 10 | } 11 | 12 | public void aprovar(Orcamento orcamento){ 13 | orcamento.setSituacao(new Aprovado()); 14 | } 15 | public void reprovar(Orcamento orcamento){ 16 | orcamento.setSituacao(new Reprovado()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/descontos/DescontoParaOrcamentoComMaisDeCincoItens.java: -------------------------------------------------------------------------------- 1 | package descontos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class DescontoParaOrcamentoComMaisDeCincoItens extends Desconto { 8 | public DescontoParaOrcamentoComMaisDeCincoItens(Desconto proximo) { 9 | super(proximo); 10 | } 11 | 12 | public BigDecimal efetuarCalculo(Orcamento orcamento) { 13 | return orcamento.getValor().multiply(new BigDecimal("0.1")); 14 | } 15 | 16 | @Override 17 | public boolean deveAplicar(Orcamento orcamento) { 18 | return orcamento.getQuantidadeItens() > 5; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/TestesDescontos.java: -------------------------------------------------------------------------------- 1 | import descontos.CalculadoraDeDescontos; 2 | import impostos.CalculadoraDeImpostos; 3 | import impostos.ICMS; 4 | import orcamento.Orcamento; 5 | 6 | import java.math.BigDecimal; 7 | 8 | public class TestesDescontos { 9 | public static void main(String[] args) { 10 | 11 | Orcamento primeiro = new Orcamento( new BigDecimal("200"),4); 12 | Orcamento segundo = new Orcamento( new BigDecimal("200"),1); 13 | 14 | CalculadoraDeDescontos calculadora = new CalculadoraDeDescontos(); 15 | System.out.println(calculadora.calcular(primeiro)); 16 | System.out.println(calculadora.calcular(segundo)); 17 | } 18 | } -------------------------------------------------------------------------------- /src/descontos/Desconto.java: -------------------------------------------------------------------------------- 1 | package descontos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public abstract class Desconto { 8 | protected Desconto proximo; 9 | 10 | public Desconto(Desconto proximo){ 11 | this.proximo = proximo; 12 | } 13 | 14 | public BigDecimal calcular(Orcamento orcamento){ 15 | if(deveAplicar(orcamento)){ 16 | return efetuarCalculo(orcamento); 17 | } 18 | return proximo.calcular(orcamento); 19 | } 20 | 21 | protected abstract BigDecimal efetuarCalculo(Orcamento orcamento); 22 | protected abstract boolean deveAplicar(Orcamento orcamento); 23 | } 24 | -------------------------------------------------------------------------------- /src/descontos/DescontoParaOrcamentoComValorMaiorQueQuinhetos.java: -------------------------------------------------------------------------------- 1 | package descontos; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public class DescontoParaOrcamentoComValorMaiorQueQuinhetos extends Desconto{ 8 | public DescontoParaOrcamentoComValorMaiorQueQuinhetos(Desconto proximo) { 9 | super(proximo); 10 | } 11 | 12 | public BigDecimal efetuarCalculo(Orcamento orcamento) { 13 | return orcamento.getValor().multiply(new BigDecimal("0.05")); 14 | } 15 | 16 | @Override 17 | public boolean deveAplicar(Orcamento orcamento) { 18 | return orcamento.getValor().compareTo(new BigDecimal("500"))>0; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/orcamento/situacao/SituacaoOrcamento.java: -------------------------------------------------------------------------------- 1 | package orcamento.situacao; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.math.BigDecimal; 6 | 7 | public abstract class SituacaoOrcamento { 8 | 9 | public BigDecimal calcularValorDescontoExtra(Orcamento orcamento){ 10 | return BigDecimal.ZERO; 11 | } 12 | public void aprovar(Orcamento orcamento){ 13 | throw new DomainException("Orcamento nao pode ser aprovado"); 14 | } 15 | 16 | public void reprovar(Orcamento orcamento){ 17 | throw new DomainException("Orcamento nao pode ser reprovado"); 18 | } 19 | 20 | public void finalizar(Orcamento orcamento){ 21 | throw new DomainException("Orcamento nao pode ser reprovado"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/pedido/GeraPedido.java: -------------------------------------------------------------------------------- 1 | package pedido; 2 | 3 | import java.math.BigDecimal; 4 | 5 | public class GeraPedido { 6 | private String cliente; 7 | private BigDecimal valorOrcamento; 8 | private int quantidadeItens; 9 | 10 | // infecao de dependecias: PedidoRespository, EmailService ... 11 | public GeraPedido(String cliente, BigDecimal valorOrcamento, int quantidadeItens) { 12 | this.cliente = cliente; 13 | this.valorOrcamento = valorOrcamento; 14 | this.quantidadeItens = quantidadeItens; 15 | } 16 | 17 | public String getCliente() { 18 | return cliente; 19 | } 20 | 21 | public BigDecimal getValorOrcamento() { 22 | return valorOrcamento; 23 | } 24 | 25 | public int getQuantidadeItens() { 26 | return quantidadeItens; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/pedido/GeraPedidoHandler.java: -------------------------------------------------------------------------------- 1 | package pedido; 2 | 3 | import orcamento.Orcamento; 4 | import pedido.acao.AcaoAposGerarPedido; 5 | import pedido.acao.EnviarEmailPedido; 6 | import pedido.acao.SalvarPedidoNoBancoDeDados; 7 | 8 | import java.time.LocalDateTime; 9 | import java.util.List; 10 | 11 | public class GeraPedidoHandler { 12 | private List acoes; 13 | 14 | public GeraPedidoHandler(List acoes) { 15 | this.acoes = acoes; 16 | } 17 | 18 | public void execute(GeraPedido dados) { 19 | Orcamento orcamento = new Orcamento(dados.getValorOrcamento(), dados.getQuantidadeItens()); 20 | 21 | Pedido pedido = new Pedido(dados.getCliente(), LocalDateTime.now(), orcamento); 22 | 23 | acoes.forEach(a -> a.executarAcao(pedido)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/TestesPedidos.java: -------------------------------------------------------------------------------- 1 | import pedido.GeraPedido; 2 | import pedido.GeraPedidoHandler; 3 | import pedido.acao.EnviarEmailPedido; 4 | import pedido.acao.SalvarPedidoNoBancoDeDados; 5 | 6 | import java.math.BigDecimal; 7 | import java.util.Arrays; 8 | 9 | public class TestesPedidos { 10 | public static void main(String[] args) { 11 | String cliente = "Bruno"; 12 | BigDecimal valorOrcamento = new BigDecimal("300"); 13 | int quantidadesItens = Integer.parseInt("2"); 14 | 15 | GeraPedido gerador = new GeraPedido(cliente, valorOrcamento, quantidadesItens); 16 | GeraPedidoHandler handler = new GeraPedidoHandler( 17 | Arrays.asList(new SalvarPedidoNoBancoDeDados(), 18 | new EnviarEmailPedido() 19 | ) 20 | ); 21 | handler.execute(gerador); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/pedido/Pedido.java: -------------------------------------------------------------------------------- 1 | package pedido; 2 | 3 | import orcamento.Orcamento; 4 | 5 | import java.time.LocalDateTime; 6 | 7 | public class Pedido { 8 | private String cliente; 9 | private LocalDateTime data; 10 | private Orcamento orcamento; 11 | 12 | public Pedido(String cliente, LocalDateTime data, Orcamento orcamento) { 13 | this.cliente = cliente; 14 | this.data = data; 15 | this.orcamento = orcamento; 16 | } 17 | 18 | public String getCliente() { 19 | return cliente; 20 | } 21 | 22 | public void setCliente(String cliente) { 23 | this.cliente = cliente; 24 | } 25 | 26 | public LocalDateTime getData() { 27 | return data; 28 | } 29 | 30 | public void setData(LocalDateTime data) { 31 | this.data = data; 32 | } 33 | 34 | public Orcamento getOrcamento() { 35 | return orcamento; 36 | } 37 | 38 | public void setOrcamento(Orcamento orcamento) { 39 | this.orcamento = orcamento; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/orcamento/Orcamento.java: -------------------------------------------------------------------------------- 1 | package orcamento; 2 | 3 | import orcamento.situacao.EmAnalise; 4 | import orcamento.situacao.SituacaoOrcamento; 5 | 6 | import java.math.BigDecimal; 7 | 8 | public class Orcamento { 9 | private BigDecimal valor; 10 | private int quantidadeItens; 11 | private SituacaoOrcamento situacao; 12 | 13 | public Orcamento(BigDecimal valor, int quantidadeItens) { 14 | this.valor = valor; 15 | this.quantidadeItens = quantidadeItens; 16 | this.situacao = new EmAnalise(); 17 | } 18 | 19 | public void aplicarDescontoExtra() { 20 | BigDecimal valorDoDescontoExtra = this.situacao.calcularValorDescontoExtra(this); 21 | this.valor = this.valor.subtract(valorDoDescontoExtra); 22 | } 23 | 24 | public void aprovar(){ 25 | this.situacao.aprovar(this); 26 | } 27 | public void reprovar(){ 28 | this.situacao.reprovar(this); 29 | } 30 | 31 | public void finalizar(){ 32 | this.situacao.finalizar(this); 33 | } 34 | 35 | public BigDecimal getValor() { 36 | return valor; 37 | } 38 | 39 | public int getQuantidadeItens() { 40 | return quantidadeItens; 41 | } 42 | 43 | public SituacaoOrcamento getSituacao() { 44 | return situacao; 45 | } 46 | 47 | public void setSituacao(SituacaoOrcamento situacao) { 48 | this.situacao = situacao; 49 | } 50 | } 51 | --------------------------------------------------------------------------------