Design Patterns - Memento Pattern
Il motivo Memento viene utilizzato per ripristinare lo stato di un oggetto a uno stato precedente. Il pattern Memento rientra nella categoria dei pattern comportamentali.
Implementazione
Lo schema Memento utilizza tre classi di attori. Memento contiene lo stato di un oggetto da restaurare. Il creatore crea e memorizza gli stati negli oggetti Memento e l'oggetto Caretaker è responsabile del ripristino dello stato dell'oggetto da Memento. Abbiamo creato le classi Memento , Originator e CareTaker .
MementoPatternDemo , la nostra classe demo, utilizzerà gli oggetti CareTaker e Originator per mostrare il ripristino degli stati degli oggetti.
Passo 1
Crea una classe Memento.
Memento.java
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}
public String getState(){
return state;
}
}
Passo 2
Crea la classe Originator
Originator.java
public class Originator {
private String state;
public void setState(String state){
this.state = state;
}
public String getState(){
return state;
}
public Memento saveStateToMemento(){
return new Memento(state);
}
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
}
Passaggio 3
Crea una classe CareTaker
CareTaker.java
import java.util.ArrayList;
import java.util.List;
public class CareTaker {
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento state){
mementoList.add(state);
}
public Memento get(int index){
return mementoList.get(index);
}
}
Passaggio 4
Usa gli oggetti CareTaker e Originator .
MementoPatternDemo.java
public class MementoPatternDemo {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #3");
careTaker.add(originator.saveStateToMemento());
originator.setState("State #4");
System.out.println("Current State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State: " + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State: " + originator.getState());
}
}
Passaggio 5
Verifica l'output.
Current State: State #4
First saved State: State #2
Second saved State: State #3