「手写设计模式」备忘录模式

122 阅读1分钟

理解名词

备忘录模式(Memento Design Pattern)是一种行为型模型,在 GoF《设计模式》中定义如下:

Captures and externalizes an object’s internal state so that it can be restored later, all without violating encapsulation.在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。

我们平时需要临时记录一些信息会用到备忘录,需要的时候翻看备忘录就能获取之前记录的信息。备忘录模式在程序中就是用来记录一些程序运行中间状态,在需要的时候进行回滚或者重做。

作用

保存对象的状态,并解耦对象与对象状态的管理。

适用场景

需要记录对象的状态,以支持回滚,重做等操作。

代码示例

定义备忘录类

public class Memento {
    private String state;

    public Memento(String state){
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

定义一个类,它拥有自己的状态属性,可以保存自己的状态以及恢复到之前的状态

public class Originator {

    private String state;
    
    private Caretaker caretaker;

    /** 保存当前状态 */
    public void saveMemento(){
        caretaker.storeMemengto(new Memento(state));
    }

    /** 恢复到前一个状态 */
    public void restore(){
        this.state = caretaker.restoreMemento().getState();
    }

}

定义备忘录管理者类,负责保存与管理备忘录对象

public class Caretaker {
    private Stack<Memento> mMemento;

    public Memento restoreMemento(){
        return mMemento.pop();
    }

    public void storeMemengto(Memento memento){
        mMemento.push(memento);
    }
}

业界经典实现

  • Android Activity