1
resposta

Memento quando já existir, através do construtor, um estado padrão

Tentei implementar o Memento em uma classe que possui um estado padrão de inicialização.

Por exemplo:

protected Estados estadoAtual;

    Celula() {
        estadoAtual = new EmFormacao();
    }

    Celula(Estados estadoAtual) {
        this.estadoAtual = estadoAtual;
    }


    public void emformacao() {
        estadoAtual.emformacao(this);
    }

    public void constroi() {
        estadoAtual.constroi(this);
    }

    public void destroi() {
        estadoAtual.destroi(this);
    }    

    public Celula salvaEstado(){
        return new Celula(estadoAtual);    
    }

    public void restaura(Celula celula) {
        estadoAtual = celula.estadoAtual.getEstado();
    }


}

Depois disso, as classes de Estados foram construídas assim:

public class Construida implements Estados {

    @Override
    public void constroi(Celula celula) {
        celula.estadoAtual = new Construida();

    }

    @Override
    public void destroi(Celula celula) {
        celula.estadoAtual = new Destruida();

    }

    @Override
    public void emformacao(Celula celula) {
        throw new RuntimeException("Célula já formada!");    
    }

    @Override
    public Estados getEstado() {
        return new Construida();
    }

}

Minhas dúvidas:

1) O getEstado está certo? É correto ele retornar um new Construida()? Nesse caso, cada classe retorna o seu correspondente - new Destruida() para o estado destruida e assim por diante;

2) Para fazer essa implementação, essa parte do código está correta?


    public Celula salvaEstado(){
        return new Celula(estadoAtual);    
    }

    public void restaura(Celula celula) {
        estadoAtual = celula.estadoAtual.getEstado();
    }

    Celula(Estados estadoAtual) {
        this.estadoAtual = estadoAtual;
    }

1 resposta

Oi André, tudo bem? Esse me parece mais o padrão State, mas respondendo sua pergunta, acredito que o getEstado, deveria retornar o estado atual. Por que independente do constroi e destroy, que altera o estado atual do atributo, o getEstado nunca muda.

Se o código está correto, é difícil dizer, correto com base em quê? Acho que faltam pedaços do código para a gente conseguir avaliar o todo e dizer algo.