Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mudança de estado usando State

Na aula sobre o padrão state, não consegui perceber em que momento o valor do atributo situacao(SituacaoOrcamento) irá mudar. Os métodos foram criados(aprovar(), reprovar(), finalizar()), mas não os percebi sendo chamados. E do jeito que está implementado não consegui visualizar uma maneira de escapar de ifs/elses na hora de fazer a mudanca de situacao.

2 respostas
solução!

Oi Thiago,

Como no curso não temos uma tela para simular o sistema, acaba não ficando fácil de visualizar os exemplos.

Mas podemos ter um código de exemplo que cria um novo orçamento:

Orcamento orcamento = new Orcamento(new BigDecimal("100.00"), 10);

No código anterior estamos instanciando um objeto orçamento, então o construtor da classe será chamado e nele está sendo setado a situação como EM_ANALISE.

Na tela da aplicação o usuário teria os botões para aprovar/reprovar/finalizar o orçamento, então se ele clicar no botão de aprovar, o sistema deveria fazer algo como:

orcamento.aprovar();

Agora chamamos o método aprovar() da classe orçamento, que tem o seguinte código:

public void aprovar() {
    this.situacao.aprovar(this);
}

Ou seja, ele vai pegar a situação atual do orçamento, que no caso ainda é EM_ANALISE, e chamar o método aprovar. Então agora será chamado o método aprovar() da classe EmAnalise, pois essa é a situação atual do orçamento no momento:

public void aprovar(Orcamento orcamento) {
    orcamento.setSituacao(new Aprovado());
}

Sendo que é justamente nesse ponto que a situação do orçamento é alterada, no caso para APROVADO.

Agora na tela do usuário o orçamento já aparece como aprovado, então nela somente vai aparecer o botão para finalizar o orçamento.

Ficou mais claro de visualizar e entender o fluxo de transição de estados agora?

Bons estudos!

Agora eu entendi, Rodrigo. Eu tava fixo na ideia de que o valor da situacao iria mudar no momento em que o desconto extra seria dado. Vlw, Rodrigo.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software