设计模式-15.备忘录模式

本文详细介绍了备忘录设计模式,一种允许对象在不破坏封装性的前提下保存和恢复其内部状态的方法。通过游戏进度保存的代码示例,展示了如何使用备忘录模式来实现状态的回滚操作。

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

使用场景:需要恢复状态场景,提供一个回滚的操作

实现:创建备忘录类,封装要保存的数据。发起者增加保存状态的方法,返回封装了当前对象数据的备忘录类对象,并提供恢复状态的方法,创建状态管理者类,保存备忘录类对象以便需要恢复时提供数据

优点:提供可恢复的操作,并且不破坏封装性。

缺点:耗内存

代码示例:游戏进度保存

/**
 * 游戏角色类
 * @author liuhao
 *
 */
public class Role {
    private int lifeValue;
    private int attackValue;
    
    public RoleMemento saveState() {
        return new RoleMemento(lifeValue, attackValue);
    }
    
    public void restoreState(RoleMemento roleMemento) {
        this.attackValue = roleMemento.getAttackValue();
        this.lifeValue = roleMemento.getLifeValue();
    }

    public String show() {
        return "Role [lifeValue=" + lifeValue + ", attackValue=" + attackValue + "]";
    }

    public int getLifeValue() {
        return lifeValue;
    }

    public void setLifeValue(int lifeValue) {
        this.lifeValue = lifeValue;
    }

    public int getAttackValue() {
        return attackValue;
    }

    public void setAttackValue(int attackValue) {
        this.attackValue = attackValue;
    }
    
}

/**
 * 备忘录类
 * @author liuhao
 *
 */
public class RoleMemento {
    
    private int lifeValue;
    
    private int attackValue;

    public RoleMemento(int lifeValue, int attackValue) {
        this.lifeValue = lifeValue;
        this.attackValue = attackValue;
    }

    public int getLifeValue() {
        return lifeValue;
    }

    public void setLifeValue(int lifeValue) {
        this.lifeValue = lifeValue;
    }

    public int getAttackValue() {
        return attackValue;
    }

    public void setAttackValue(int attackValue) {
        this.attackValue = attackValue;
    }

}

/**
 * 管理者类
 * @author liuhao
 *
 */
public class Caretaker {
    private RoleMemento memento;

    public RoleMemento getMemento() {
        return memento;
    }

    public void setMemento(RoleMemento memento) {
        this.memento = memento;
    }
    
    
}

public class Main {

    public static void main(String[] args) {
        Role role = new Role();
        role.setLifeValue(100);
        role.setAttackValue(100);
        System.out.println("初始化状态:");
        System.out.println(role.show());
        
        Caretaker caretaker = new Caretaker();
        caretaker.setMemento(role.saveState());
        
        role.setLifeValue(0);
        role.setAttackValue(0);
        System.out.println("死亡状态:");
        System.out.println(role.show());
        
        //恢复
        role.restoreState(caretaker.getMemento());
        System.out.println("恢复后状态:");
        System.out.println(role.show());
    }

}

结果:

下载前可以先看下教程 https://pan.quark.cn/s/16a53f4bd595 小天才电话手表刷机教程 — 基础篇 我们将为您简单的介绍小天才电话手表新机型的简单刷机以及玩法,如adb工具的使用,magisk的刷入等等。 我们会确保您看完此教程后能够对Android系统有一个最基本的认识,以及能够成功通过magisk root您的手表,并安装您需要的第三方软件。 ADB Android Debug Bridge,简称,在android developer的adb文档中是这么描述它的: 是一种多功能命令行工具,可让您与设备进行通信。 该命令有助于各种设备操作,例如安装和调试应用程序。 提供对 Unix shell 的访问,您可以使用它在设备上运行各种命令。 它是一个客户端-服务器程序。 这听起来有些难以理解,因为您也没有必要去理解它,如果您对本文中的任何关键名词产生疑惑或兴趣,您都可以在搜索引擎中去搜索它,当然,我们会对其进行简单的解释:是一款在命令行中运行的,用于对Android设备进行调试的工具,并拥有比一般用户以及程序更高的权限,所以,我们可以使用它对Android设备进行最基本的调试操作。 而在小天才电话手表上启用它,您只需要这么做: - 打开拨号盘; - 输入; - 点按打开adb调试选项。 其次是电脑上的Android SDK Platform-Tools的安装,此工具是 Android SDK 的组件。 它包括与 Android 平台交互的工具,主要由和构成,如果您接触过Android开发,必然会使用到它,因为它包含在Android Studio等IDE中,当然,您可以独立下载,在下方选择对应的版本即可: - Download SDK Platform...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值