一、什麼是備忘錄模式 Memento模式也叫備忘錄模式,是行為模式之一,它的作用是儲存對象的內部狀態,並在需要的時候(undo/rollback)恢複對象以前的狀態。
二、備忘錄模式的應用情境 如果一個對象需要儲存狀態並可通過undo或rollback等操作恢複到以前的狀態時,可以使用Memento模式。
1)一個類需要儲存它的對象的狀態(相當於Originator角色)
2)設計一個類,該類只是用來儲存上述對象的狀態(相當於Memento角色)
3)需要的時候,Caretaker角色要求Originator返回一個Memento並加以儲存
4)undo或rollback操作時,通過Caretaker儲存的Memento恢複Originator對象的狀態
三、備忘錄模式的結構
四、備忘錄模式的角色和職責 Originator(原生者)
需要被儲存狀態以便恢複的那個對象。
Memento(備忘錄)
該對象由Originator建立,主要用來儲存Originator的內部狀態。
Caretaker(管理者)
負責在適當的時間儲存/恢複Originator對象的狀態。
五、例子
Person.java
public class Person { private String name; private String sex; private int age; public Person() {} public Person(String n, String s, int a) { name = n; sex = s; age = a; } public String getName() { return name; } public void setName(String n) { name = n; } public String getSex() { return sex; } public void setSex(String s) { sex = s; } public int getAge() { return age; } public void setAge(int a) { age = a; } public void display() { System.out.println("name: " + name + ", sex: " + sex + ", age: " + age); } // Creage a memento public Memento createMemento() { return new Memento(name, sex, age); } // Restore public void setMemento(Memento memento) { name = memento.getName(); sex = memento.getSex(); age = memento.getAge(); }}
Memento.java
public class Memento extends Person { private String name; private String sex; private int age; public Memento(String n, String s, int a) { super(n, s, a); }}
Caretaker.java
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento m) { memento = m; }}
MainClass.java
public class MainClass { public static void main(String[] args) { Person p = new Person("Jim", "Male", 23); Caretaker caretaker = new Caretaker(); //Memento m = p.createMemento(); caretaker.setMemento(p.createMemento()); //System.out.println(m.getName()); p.display(); p.setName("John"); p.setAge(20); p.display(); p.setMemento(caretaker.getMemento()); p.display(); }}
output: