天天看點

JAVA 設計模式 備忘錄模式

用途

備忘錄模式 (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;

測試代碼

JAVA 設計模式 備忘錄模式
JAVA 設計模式 備忘錄模式

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

運作結果

JAVA 設計模式 備忘錄模式
JAVA 設計模式 備忘錄模式

State = ON

State = OFF

推薦

本文屬于

JAVA設計模式系列

參考資料

《大話設計模式》

《HeadFirst設計模式》