用途
備忘錄模式 (Memento)
在不破壞封裝性的前提下,捕獲一個對象的内部狀态,并在該對象之外儲存這個狀态。
這樣以後就可将該對象恢複到原先儲存的狀态。
備忘錄模式是一種行為型模式。
結構
圖-備忘錄模式結構圖
Memento : 負責存儲 Originator 對象的内部狀态,并可以防止 Originator 以外的其他對象通路 Memento。
Memento 有兩個接口,Caretaker 隻能看到備忘錄的窄接口,它隻能将備忘錄傳遞給其他對象。
Originator 可以看到一個寬接口,允許它通路傳回到先前狀态所需的所有資料。
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String GetState() {
return state;
}
Originator : 負責建立一個備忘錄 Memento,用以記錄目前時刻它的内部狀态,并可使用備忘錄恢複内部狀态。
Originator 可根據需要決定 Memento 存儲 Originator 的哪些内部狀态。
class Originator {
public void SetState(String state) {
public Memento CreateMemento() {
return (new Memento(state));
public void SetMemento(Memento memento) {
state = memento.GetState();
public void Show() {
System.out.println("State = " + state);
Caretaker : 負責儲存好備忘錄 Memento,不能對備忘錄的内容進行操作或檢查。
class Caretaker {
private Memento memento;
this.memento = memento;
public Memento GetMemento() {
return memento;
測試代碼

public class MementoPattern {
public static void main(String[] args) {
Originator o = new Originator();
o.SetState("ON");
o.Show();
Caretaker c = new Caretaker();
c.SetMemento(o.CreateMemento());
o.SetState("OFF");
o.SetMemento(c.GetMemento());
View Code
運作結果

State = ON
State = OFF
推薦
本文屬于
JAVA設計模式系列。
參考資料
《大話設計模式》
《HeadFirst設計模式》