设计模式——备忘录模式

这篇具有很好参考价值的文章主要介绍了设计模式——备忘录模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

备忘录模式(Memento Pattern)是一种行为型设计模式,它在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在需要时将对象恢复到先前的状态。

原理

  • 发起人(Originator): 是拥有复杂内部状态的对象,它可以创建和恢复备忘录。
  • 备忘录(Memento): 存储发起人的内部状态,通常是一个值对象或数据容器,对外提供有限的接口以防止直接访问其内部细节。
  • 管理器/caretaker(Caretaker): 负责存储和传递备忘录对象,但不能对备忘录的内容进行操作或解读,只负责保管和还原发起人的状态。

Java代码示例

// 备忘录类
public class Memento {
    private final String state;

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

    // 只读方法,允许发起者获取备忘录中的状态
    public String getState() {
        return state;
    }
}

// 发起人(如游戏角色)
public class Originator {
    private String state;

    // 设置或获取当前状态
    public void setState(String state) {
        System.out.println("State changed to: " + state);
        this.state = state;
    }

    public String getState() {
        return state;
    }

    // 创建备忘录并保存当前状态
    public Memento saveToMemento() {
        return new Memento(state);
    }

    // 从备忘录恢复状态
    public void restoreFromMemento(Memento memento) {
        this.state = memento.getState();
        System.out.println("State restored to: " + state);
    }
}

// 管理器/caretaker
public class Caretaker {
    private Memento memento;

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

    public Memento getMemento() {
        return memento;
    }
}

// 使用示例
public class Client {
    public static void main(String[] args) {
        Originator originator = new Originator();
        originator.setState("State A");

        // 保存当前状态到备忘录
        Caretaker caretaker = new Caretaker();
        caretaker.setMemento(originator.saveToMemento());

        // 改变状态
        originator.setState("State B");

        // 恢复之前保存的状态
        originator.restoreFromMemento(caretaker.getMemento());
    }
}

设想你正在玩一款电子游戏,每当你存档的时候,游戏就会把你的角色状态(等级、装备、位置等)打包成一个“备忘录”,然后存入存档文件中。当你想要读取存档时,游戏会从存档文件中取出“备忘录”,并将角色状态恢复到存档时的样子。在这个过程中,游戏程序(发起人)通过备忘录模式保护了内部状态信息,而存档系统(管理器)仅负责保存和加载这些备忘录。文章来源地址https://www.toymoban.com/news/detail-803708.html

应用场景

  • 文本编辑器:用户可以随时保存文档状态(备忘录),并在需要时撤销到之前的状态。
  • 游戏:保存和恢复玩家的游戏进度或角色属性状态。
  • 数据库事务:事务管理器使用备忘录保存事务开始时的数据状态,在事务失败时能够回滚到初始状态。

适用性

  • 需要保存和恢复对象的内部状态到过去某个时刻的情况。
  • 对象的状态信息应该作为值对象来存储,而不是通过复制对象的所有变量。
  • 当直接访问对象内部状态违反封装原则或者可能导致对象状态不一致时。

到了这里,关于设计模式——备忘录模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,可以从备忘录对象恢复到大战前的状态 针对每一种角色,设计一个类来存储该角色的状态 【分析】 一个对象,就对应一个保存对象状态的对象, 这样当我们游戏

    2024年02月13日
    浏览(56)
  • 《设计模式》备忘录模式

    定义 : 备忘录模式又称为快照模式或者令牌模式, 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 属性 行为型 模式。 备忘录模式的角色组成 : Originator(发起人) :负责创建一个 Memento

    2024年02月06日
    浏览(45)
  • 【设计模式】备忘录模式

    主页传送门: 💁 传送        备忘录(Memento Pattern)模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。。其定义如下: Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state later.        即:在不破坏封

    2024年02月07日
    浏览(51)
  • 设计模式——备忘录模式

    备忘录模式(Memento Pattern)是一种行为型设计模式,它在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样可以在需要时将对象恢复到先前的状态。 发起人(Originator): 是拥有复杂内部状态的对象,它可以创建和恢复备忘录。 备忘录(M

    2024年01月19日
    浏览(42)
  • 设计模式-备忘录模式

    备忘录模式(Memento Pattern)是计算机科学中的一种行为设计模式。它提供了一种在不破坏封装性的前提下,捕获和恢复对象内部状态的方法。这种模式主要用于在用户需要回滚到对象的某个先前状态时,能够实现状态的还原。 在备忘录模式中,主要涉及到三个角色: Origina

    2024年01月23日
    浏览(48)
  • 【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    备忘录模式(Memento Pattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 备忘录模式

    2023年04月20日
    浏览(73)
  • 设计模式行为型——备忘录模式

    目录 备忘录模式的定义 备忘录模式的实现 备忘录模式角色 备忘录模式类图 备忘录模式举例 备忘录模式代码实现 备忘录模式的特点 优点 缺点 使用场景 注意事项 实际应用         备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式(Token Pattern),属

    2024年02月14日
    浏览(56)
  • 【前端设计模式】之备忘录模式

    设计模式是在软件开发中经过验证的解决问题的方法。它们是从经验中总结出来的,可以帮助我们更好地组织和管理代码,提高代码的可维护性、可扩展性和可重用性。无论是前端还是后端开发,设计模式都扮演着重要的角色。在本专栏中,我们将探索一些常见的前端设计模

    2024年02月05日
    浏览(43)
  • 设计模式(十八)备忘录

    在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在以后将对象恢复到原先保存的状态。备忘录模式是一种对象行为型模式,其别名为标记(Token)模式。 备忘录模式的核心在于备忘录类以及用于管理备忘录的负责人类的设计,包

    2024年02月04日
    浏览(44)
  • C++ 设计模式之备忘录模式

    【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C++编码部分】         -- 什么是备忘录模式  (第17种模式)          备忘录模式 (Memento Pattern)是⼀种 ⾏为型设计模式 ,它允许在不暴露对象实现的情况下捕获对

    2024年01月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包