Шаблон Memento используется для восстановления состояния объекта до предыдущего состояния. Шаблон Memento подпадает под категорию поведенческих шаблонов.
Реализация
Шаблон Memento использует три актерских класса. Памятка содержит состояние объекта, который будет восстановлен. Originator создает и сохраняет состояния в объектах Memento, а объект смотрителя отвечает за восстановление состояния объекта из Memento. Мы создали классы Memento , Originator и CareTaker .
MementoPatternDemo , наш демонстрационный класс, будет использовать объекты CareTaker и Originator, чтобы показать восстановление состояний объекта.
Шаг 1
Создать класс Memento.
Memento.java
public class Memento { private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } }
Шаг 2
Создать класс 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(); } }
Шаг 3
Создать класс 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); } }
Шаг 4
Используйте объекты CareTaker и 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()); } }
Шаг 5
Проверьте вывод.