Definição
Para gravar um estado interno do objeto sem violar o encapsulamento e
reavê-lo mais tarde, sem o conhecimento do objeto original. Uma lembrança é um objeto que armazena um estado interno instantâneo de outro objeto.
Para gravar um estado interno do objeto sem violar o encapsulamento e
reavê-lo mais tarde, sem o conhecimento do objeto original. Uma lembrança é um objeto que armazena um estado interno instantâneo de outro objeto.
Quando usar
• Quando for util deixar algumas informações em um objeto gravado em outro objeto.
• Quando você quiser criar um estado instantâneos para um objeto.
• Quando você precisa desfazer / refazer funcionalidades.
Benefícios
Capacidade de restaurar um objeto ao seu estado anterior.
Desvantagens / consequências
Cuidados devem ser tomados se o autor pode alterar outros objetos ou recursos
O memento pattern opera sobre um único objeto. Usando o memento para armazenar grandes quantidades de dados do originador pode ser caro se os clientes criarem as lembranças e essas retornarem um estado com freqüência.
Exemplo
public class Originator {
private String state;
/ * Lotes de memória utilizando os dados particulares que não têm de ser
salvo. Em vez disso, usar um objeto de lembrança pequeno. * /
salvo. Em vez disso, usar um objeto de lembrança pequeno. * /
public void set(String state) {
System.out.println("Originator: Setting state to " + state);
this.state = state;
}
public Object saveToMemento() {
System.out.println("Originator: Saving to Memento.");
return new Memento(state);
}
public void restoreFromMemento(Object m) {
if (m instanceof Memento) {
Memento memento = (Memento) m;
state = memento.getSavedState();
System.out.println("Originator: State after restoring
from Memento: " + state);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Caretaker {
private List<Object> savedStates = new ArrayList<Object>();
public void addMemento(Object m) {
savedStates.add(m);
}
public Object getMemento(int index) {
return savedStates.get(index);
}
}
public class Memento {
private String state;
public Memento(String stateToSave) {
state = stateToSave;
}
public String getSavedState() {
return state;
}
}
public class MementoExample {
public static void main(String[] args) {
Caretaker caretaker = new Caretaker();
Originator originator = new Originator();
originator.set("State1");
originator.set("State2");
caretaker.addMemento(originator.saveToMemento());
originator.set("State3");
caretaker.addMemento(originator.saveToMemento());
originator.set("State4");
originator.restoreFromMemento(caretaker.getMemento(1));
}
}
Quando MementoExample é executado o resultado é:
Originator: Setting state to State1
Originator: Setting state to State2
Originator: Saving to Memento.
Originator: Setting state to State3
Originator: Saving to Memento.
Originator: Setting state to State4
Originator: State after restoring from Memento: State3
Exemplo de uso
Freqüentemente usado em operações de banco de dados e fazer / desfazer situações.
Nenhum comentário:
Postar um comentário