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? Parece que esse tópico foi replicado, eu tentei responder o primeiro tópico, que está neste link: https://cursos.alura.com.br/forum/topico-memento-quando-ja-existir-atraves-do-construtor-um-estado-padrao-97322

Vamos centralizar a discussão lá?