Wzorce projektowe - wzór Memento
Wzorzec Memento służy do przywracania stanu obiektu do poprzedniego stanu. Wzór Memento należy do kategorii wzorców behawioralnych.
Realizacja
Wzorzec Memento wykorzystuje trzy klasy aktorów. Memento zawiera stan obiektu do przywrócenia. Twórca tworzy i przechowuje stany w obiektach Memento, a obiekt Caretaker jest odpowiedzialny za przywrócenie stanu obiektu z Memento. Stworzyliśmy klasy Memento , Originator i CareTaker .
MementoPatternDemo , nasza klasa demonstracyjna, użyje obiektów CareTaker i Originator do pokazania przywracania stanów obiektów.
Krok 1
Utwórz klasę Memento.
Memento.java
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}
public String getState(){
return state;
}
}
Krok 2
Utwórz klasę inicjatora
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();
}
}
Krok 3
Utwórz klasę 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);
}
}
Krok 4
Użyj obiektów CareTaker i 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());
}
}
Krok 5
Sprawdź dane wyjściowe.
Current State: State #4
First saved State: State #2
Second saved State: State #3