Boa tarde,
Quando foi descrito o problema, a primeira solução que imaginei foi utilizar um Enum para representar a lista de estados do objeto, e cada elemento do Enum receberia a lista de estados para o qual ele pode transitar. No final do exercicio essa solução ainda me pareceu mais limpa.
enum State{
APROVADO(FINALIZADO),
REPROVADO(FINALIZADO),
FINALIZADO(),
EM_APROVACAO(APROVADO,REPROVADO)
}
1- Quais são os pontos fracos dessa abordagem?
2- Muitas vezes surge a necessidade de uma outra classe que utiliza "Orcamento" se pergunta em qual estado o objeto "Orcamento" se encontra. Nesse caso penso em alterar a interface "EstadoDeUmOrcamento " para que as filhas retornem um elemento Enum representando seu estado.
StateEnum{
APROVADO
REPROVADO
FINALIZADO
EM_APROVACAO
}
interface EstadoDeUmOrcamento {
StateEnum getState();
...
}
class Aprovado implements EstadoDeUmOrcamento {
StateEnum getState(){
return APROVADO
}
}