备忘录模式(Memento Pattern)用来恢复一个对象的状态到以前的状态。 备忘录模式下属于行为模式的类别。
在这个示例中,备忘录模式(Memento Pattern)使用三个操作者类。 Memento
类中包含要恢复的对象的状态。 创建者在Memento
对象中创建和存储状态,Caretaker
对象负责从Memento
中恢复对象状态。在这个示例中,创建了以下几个类:Memento
,Originator
和CareTaker
。
MementoPatternDemo
这是一个演示类,它将使用CareTaker
和Originator
对象来显示对象状态的恢复。
备忘录模式(Memento Pattern)示例的结构如下图所示 -
创建一个Memento
类,其代码如下-
Memento.java
public class Memento { private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } }
创建一个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(); } }
创建一个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); } }
创建一个类-MementoPatternDemo
并使用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()); } }
验证输出,执行上面的代码得到以下结果 -
Current State: State #4 First saved State: State #2 Second saved State: State #3