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;
}