├── 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 |
--------------------------------------------------------------------------------