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!