备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
实现
备忘录模式使用三个类 Memento、Originator 和 CareTaker。Memento 包含了要被恢复的对象的状态。Originator 创建并在 Memento 对象中存储状态。Caretaker 对象负责从 Memento 中恢复对象的状态。
MementoPatternDemo,我们的演示类使用 CareTaker 和 Originator 对象来显示对象的状态恢复。

步骤 1
创建 Memento 类。
Memento.java
1 2 3 4 5 6 7 8 9 10 11 | public class Memento { private String state; public Memento(String state){ this .state = state; } public String getState(){ return state; } } |
步骤 2
创建 Originator 类。
Originator.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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
验证输出。
Current State: State #4 First saved State: State #2 Second saved State: State #3