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

前言

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

定义

  • 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.
  • 优点:
    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值