《Android源码设计模式》读书笔记 (13) 第13章 备忘录模式

来源:互联网 发布:易众联读卡器软件 编辑:程序博客网 时间:2024/06/08 14:20

前言

  • 备忘录模式也是一种行为模式,用来保存对象的当前状态.

定义

  • 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.
  • 优点:
    1.给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态
    2.实现信息的封装,使得用户不需要关心状态的保存细节
  • 缺点:消耗资源,如果累成员变量过多,势必会占用比较大的资源,而且每一次保存都能消耗一定的内存
  • 使用场景:
    1.需要保存一个对象在某一个时刻的状态或者部分状态
    2.如果用一个接口来让其他对象得到这些状态

UML类图

这里写图片描述

  • originator:发起者,负责创建一个备忘录,可以记录\恢复自身的内部状态
  • memento:备忘录角色,用于存储originator的内部状态
  • caretaker:负责存储备忘录,不能对备忘录memento的内容进行操作和访问,只能够将备忘录传递给其他对象.

实现步骤

  • 书中提供了游戏存档和读取存档的案例.相当具有代表性,足以让我们理解这个模式
  • originator:在本案例中,是游戏game实体类.
/** * 游戏的数据模型model 三种属性,进度\生命值\武器 *  * @author max *  */public class Game {    private int mCheckPoint = 1;    private int mLifeValue = 100;    private String mWeapon = "武器";    // 玩游戏    public void play() {    }    // 退出    public void quit() {    }    // 创建备忘录Memoto实体    public Memoto createMemoto() {        Memoto memoto = new Memoto();        memoto.mCheckPoint = mCheckPoint;        memoto.mLifeValue = mLifeValue;        memoto.mWeapon = mWeapon;        return memoto;    }    // 恢复读取备忘录Memoto实体    public void restore(Memoto memoto) {        this.mCheckPoint = memoto.mCheckPoint;        this.mLifeValue = memoto.mLifeValue;        this.mWeapon = memoto.mWeapon;    }}
  • memento:在本案例中是记录game的实体,和game拥有相同的属性
/** * 备忘录,记录游戏实体的状态 * 所有参数即游戏实体的参数 * @author max * */public class Memoto {    public int mCheckPoint;    public int mLifeValue;    public String mWeapon;}
  • caretaker:
/** * 负责管理Memoto * 但不能对备忘录Memoto的数据进行操作,只能由游戏实体在create或者restore备忘录实体 * @author max * */public class Caretaker {    Memoto mMemoto;//备忘录    //存档    public void archive(Memoto memoto){        this.mMemoto = memoto;    }    //获取存档    public Memoto getMemoto(){        return mMemoto;    }}

源码下载

  • 本案例只是一个简单的备忘录模式demo,便于理解,在实际开发中,我们很容易犯的错误,是在activity类做过多的逻辑处理,混乱且职责太多,把editText相关撤销和重做的功能通过备忘录memoto封装到edittext控件中去.建议有书的童鞋多看看,细细体会,在实际开发中绝对是会有很大的提升的.

  • 点击下载源码.http://download.csdn.net/detail/qq_28690547/9438293

0 0