12.行为型 - 备忘录模式 (Memento)

1.定义说明

  • 行为模式,用于保存对象的内部状态(备忘录角色),以便可以再恢复到当前状态

2.UML类图

在这里插入图片描述

  • 角色说明
    Originator : 负责创建一个备忘录
    Memoto : 备忘录角色,记录需要记录的具体属性参数
    CareTaker : 只负责存储备忘录,不对Memoto的内容进行操作和访问
  • 要点说明
    Memoto备忘录角色只是一个对象的内部状态的快照

3.示例代码

  • GameOriginator 负责创建备忘录
public class GameOriginator {
    private static final String TAG = "GameOriginator";

    private int version;
    private String name;
    private int mode;
    private int status;
    private int progress;

    public void play() {
        Log.d(TAG, "play");
    }

    public void quit() {
        Log.d(TAG, "quit");
    }

    public Memento createMemento() {
        Memento memento = new Memento();
        memento.mode = mode;
        memento.status = status;
        memento.progress = progress;
        return memento;
    }

    public void restore(Memento memento) {
        this.mode = memento.mode;
        this.status = memento.status;
        this.progress = memento.progress;
    }
}
  • Memento 备忘录角色
public class Memento {
    // 模式
    public int mode;

    // 状态
    public int status;

    // 进度
    public int progress;
}

  • CareTaker 负责存储备忘录
public class CareTaker {
    private Memento memento;

    public void storeMemento(Memento memento) {
        this.memento = memento;
    }

    public Memento restoreMemento() {
        return memento;
    }
}

4.源码中应用

Activity生命周期中的两个方法就是用于保存、恢复页面的状态:

  • onSaveInstanceState
    当Activity变得容易被系统销毁时,比如横竖屏切换,会回调此方法,用于保存当前页面的状态。
  • onRestoreInstanceState
    重建后会调用onRestoreInstanceState,通过上面保存的Bundle对象来做一些恢复操作,此处的Bundle不会为空。

5.总结

  • 优缺点
    优点:提供可以恢复对象内部状态的机制,实现Memoto的封装,
              用户无需关心状态的保存细节
    缺点:增加额外的对象,会消耗一定的内存(感觉有点苛刻,需求还是最重要的)
发布了37 篇原创文章 · 获赞 0 · 访问量 581

猜你喜欢

转载自blog.csdn.net/qq_37514242/article/details/103339540