美文网首页
行为型模式——备忘录模式

行为型模式——备忘录模式

作者: Doooook | 来源:发表于2020-08-30 08:53 被阅读0次

概念

备忘录模式用于保存对象的内部状态而不破坏其封装,并在以后阶段恢复其状态。比如涉及到事务操作,需要回滚时就需要保存之前的状态。

实现

备忘录模式依赖于三个类——Originator、Memento和Caretaker


image.png
  • Originator(发起者):发起者是我们需要记住状态的对象,以便在某个时刻恢复它。
  • Caretaker(管理者):这是负责触发发起者的变化或触发发起者返回先前状态的动作的类。
  • Memento(备忘录):这是负责存储发起者内部状态的类。备忘录提供了两种设置和获取状态的方法,但这些方法应该对管理者隐藏。

应用实例

发起者CarOriginator

CarOriginator包含一个内部类CarMemento(备忘录),用于保存状态(saveState方法),恢复(restoreState)时使用

/**
 * @author: Jay Mitter
 * @date: 2020-08-29 22:03
 * @description: 发起者,通过创建一个新的备忘录对象来保存自己的内部状态
 */
@Data
public class CarOriginator {

    private String state;

    /**
     * 创建一个新的备忘录对象,保存发起者的状态
     * @return Memento
     */
    public CarMemento saveState() {
        return new CarMemento(this.state);
    }

    /**
     * 恢复状态
     * @param carMemento
     */
    public void restoreState(CarMemento carMemento) {
        this.state = carMemento.getState();
    }

    /**
     * CarMemento class
     */
    public static class CarMemento {

        private final String state;

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

        private String getState() {
            return state;
        }

    }

}

测试,备忘录管理者CarCaretaker

/**
 * @author: Jay Mitter
 * @date: 2020-08-29 22:05
 * @description: 备忘录管理者,负责保存备忘录对象,但是从不修改(甚至不查看)备忘录对象的内容
 */
public class CarCaretaker {

    public static void main(String[] args) {
        new CarCaretaker().runMechanicTest();
    }

    private void runMechanicTest() {
        CarOriginator.CarMemento carMemento = new CarOriginator.CarMemento("");
        CarOriginator originator = new CarOriginator();
        originator.setState("State1");
        originator.setState("State2");
        carMemento = originator.saveState();
        originator.setState("State3");
        originator.restoreState(carMemento);
        System.out.println("final state: " + originator.getState());
    }

}

结果:

final state: State2

总结

备忘录模式实在不破坏封装的条件下,通过备忘录对象(Memento)存储另外一个对象内部状态的快照,在将来合适的时候把这个对象还原到存储起来的状态。

优点

  • 给用户提供了一种可以恢复状态的机制,可以是用户能够方便的回到某个历史的状态
  • 实现了信息的封装,是的用户不需要关心状态的保存细节

缺点

  • 消耗资源,如果累的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

相关文章

网友评论

      本文标题:行为型模式——备忘录模式

      本文链接:https://www.haomeiwen.com/subject/gkzjsktx.html