设计模式-- 备忘录模式

【愚公系列】二十三种设计模式(十八)-备忘录模式(Memento Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

简介

备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。

备忘录模式是一种对象行为型模式,其主要优点如下。
提供了一种可以恢复状态的机制。当用户需要时能够比较方便地将数据恢复到某个历史的状态。
实现了内部状态的封装。除了创建它的发起人之外,其他对象都不能够访问这些状态信息。
简化了发起人类。发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。

备忘录模式结构图如下:
在这里插入图片描述

角色

有三种角色:
Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。
Memetno(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问回到先前状态所需的所有数据。
Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。

简单示例

1.创建Memetno(备忘录)

public class Memetno {
    private int useTime;//使用时间
    private String name;//设备名称
    private String state;//状态


    public int getUseTime() {
        return useTime;
    }

    public void setUseTime(int useTime) {
        this.useTime = useTime;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

2.创建Caretaker(管理者)

public class Caretaker {
    Memetno memetno;


    public Memetno getMemetno() {
        return memetno;
    }

    public void setMemetno(Memetno memetno) {
        this.memetno = memetno;
    }
}

3.创建Originator(发起人)

public class Originator {
    private int useTime;//使用时间
    private String name;//设备名称
    private String state;//状态
    public int getUseTime() {
        return useTime;
    }
    public void setUseTime(int useTime) {
        this.useTime = useTime;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public Originator(int useTime, String name, String state) {
        this.useTime = useTime;
        this.name = name;
        this.state = state;
    }

    //创建备忘录对象
    public Memetno createMemetno(){
        Memetno memetno = new Memetno();
        memetno.setName(name);
        memetno.setState(state);
        memetno.setUseTime(useTime);
        return memetno;
    }

    public void setMemetno(Memetno memetno){
        this.name = memetno.getName();
        this.useTime = memetno.getUseTime();
        this.state = memetno.getState();

    }

    //获取对象当前状态
    public void getCurrentState() {
        System.out.println("当前设备名称:" + this.name + "当前使用时间:" + this.useTime + "当前工作状态:" + this.state);
    }
}

4.Client(Main验证)

public class MemetnoMain {
    public static void main(String[] args) {
        //发起者
        Originator originator = new Originator(1234,"test01","01");
        //管理者
        Caretaker caretaker = new Caretaker();
        System.out.println("test01 is running ...");
        originator.getCurrentState();
        //备忘录模式保存状态
        System.out.println("save state .....");
        caretaker.setMemetno(originator.createMemetno());
        originator.setName("test01");
        originator.setUseTime(12345);
        originator.setState("3");
        System.out.println("test01 running 12345 times ...");
        originator.getCurrentState();

        //恢复
        originator.setMemetno(caretaker.getMemetno());
        System.out.println("恢复后状态:");
        originator.getCurrentState();
    }
}

在这里插入图片描述

VOS3000线路对接、路由配置与路由分析操作教程 通过本教程,你应该已经掌握了VOS3000的线路对接、路由配置和路由分析的基本操作。添加备用路由:为常用前缀添加备用路由,确保在主路由失效时呼叫仍能正常进行。进入线路管理:点击“系统管理” -> “线路管理” -> “添加线路”。查看日志:在“系统日志”中查看路由选择情况,确保路由配置正确。失败原因:查看失败呼叫的原因(如“无应答”、“线路忙”等)。线路选择:选择之前添加的线路(如“供应商A”)。保存并启用:填写完毕后,点击“保存”并启用路由。路由名称:自定义一个名称(如“路由A”)。 阅读详情

相关推荐

Android安全支付(1)-整体架构-keymint

(1)接口定义hardware/interfaces/security/keymint/aidl/android/hardware/security/keymint/IKeyMintDevice.aidl。keymint是keymaster v4之后的替代设计。所以android 15上最好采用keymint的接口进行硬件功能的对接。同时,我们会集成一款紫光的芯片。3.可以用keyStore.getKey()来获取存储在keyStore中的数据进行加密和解密。四、关于keymint的接口定义和具体实现。

Android系统开发-VR OS-系统安全隐私 1767

深入理解设计模式(16):备忘录模式

备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式。 一、什么是备忘录模式 定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态。备忘录模式实现的方式...

dbc68367的博客 254

ArcGIS | 全球新冠肺炎地图数据下载和处理

ArcGIS

thinkpang的博客 2900

23种设计模式之备忘录模式(Memento Pattern)

本篇文章将23种设计模式中的备忘录模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

使用python对创芯科技CANalyst-II分析仪进行二次开发(详细教程)

使用python对创芯科技CANalyst-II分析仪进行二次开发

ningqingzy的博客 1万+

【AUTOSAR-RTE】-1-聊一聊RTE(Run-Time Environment)

RTE(Run-Time Environment)是AUTOSAR ECU架构的核心。

「汽车电子助手」的博客 6501

【C#设计模式】22.备忘录模式(Memento Pattern)【行为型】

在软件构建过程中,某些对象的状态在转换的过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。 如何实现对象状态的良好保存与恢复,但同时又不会因此而破坏对象本身的封装性? .........

星Yeah 的博客 1641

制作你自己的yolov5数据集并进行训练

项目地址:make-your-yolov5_dataset 一、数据集标注软件 labelImg labelMe 精灵标注助手 更多的标注工具你可以去看:深度学习图像标注工具汇总 、 十个最常用深度学习图像/视频数据标注工具 、 百度一下 在这里我选择使用labelImg 二、数据集标注 下载labelImg 解压,直接打开labelimg.exe labelImg标注数据 标注完成后即可获得VOC格式(生成.xml文件)的数据 目录结构: dataset │ ├─Annotations .

年少的勇气已经用完,剩下的就是三思而后行 1万+

设计模式:备忘录模式(Memento Pattern)

备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。

TechNomad的博客 954

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1589

Python 爬虫实战:爬取评论数据做情感分析

摘要:本文介绍基于Python的京东商品评论爬取与情感分析全流程实现。通过Requests库抓取评论数据接口,结合JSON解析获取结构化评论信息。利用SnowNLP进行中文文本情感分析,量化用户评价的情感倾向(正面/负面/中性)。结果显示正面评论占比66.3%,负面评论13.3%,关键词分析发现"卡顿""发热"是主要负面因素。该方法可应用于产品优化、品牌管理等场景,为决策提供数据支持。

2503_91057718的博客 1708

设计模式-备忘录模式-Memento Pattern

在备份之前,对数据进行哈希摘要,只有当哈希值发生变化时才进行备份,这样可以避免不必要的备份操作。

wesigj的博客 2109

解锁Vscode:C/C++环境配置超详细指南

本文详细介绍如何在 VSCode 中配置 C/C++ 开发环境,帮助开发者快速搭建高效的编码调试环境。内容涵盖前期准备、软件下载安装、环境变量配置、工作区文件设置及测试运行全流程:首先需准备 VSCode 编辑器、MinGW-w64 编译器及 C/C++ 插件;接着完成工具下载与安装,配置系统环境变量以确保编译器可全局调用;然后通过创建.vscode工作区文件夹,配置核心文件,实现代码智能提示与调试功能;最后通过编写 Hello World 示例验证环境可用性,并附上常见问题排查方案。

邓邓子的博客 3045

设计模式 21 备忘录模式 Memento Pattern

备忘录模式是一种行为型设计模式,它允许你将一个对象的状态保存到一个独立的“备忘录”对象中,并在之后恢复到该状态。备忘录模式是一种强大的设计模式,可以帮助我们实现状态的保存和恢复功能。在使用备忘录模式时,需要注意封装性、管理、性能、安全性以及使用场景等方面,以确保其有效性和安全性。

jxusthusiwen的专栏 1130

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

设计模式——备忘录模式(Memento Pattern)

行为型模式保存一个对象的某个状态,以便在适当的时候恢复对象。

码鹿的记录 715

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

行为型设计模式: 备忘录模式(Memento Pattern)

设计模式;行为型模式;备忘录模式(Memento Pattern): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式(Memento Pattern)属于行为型模式。行为型模式涉及到算法和对象间职责的分配;行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式。行为型模式刻划了在运行时难以跟踪的复杂的控制流;它们将你的注意力从控制流转移到对象间的联系方式上来。

智能多媒体 433

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

19.设计模式——备忘录模式

备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 何时使用:很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"

蓝色的天空的博客 1198

设计模式-备忘录模式(Memento)

备忘录模式(Memento Pattern)是一种行为型设计模式,它允许你捕获对象的内部状态,并在需要时恢复该状态,而无需暴露该对象的实现细节。所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样,以后就可以将该对象恢复到原先保存的状态。这种模式的名字可能对一些人来说稍微有点陌生,但其另一个名字快照模式可能会让人觉得更为熟悉。备忘录模式的适用场景包括:需要保存和恢复数据的场景,例如,编辑文档时需要撤销操作;需要避免重复计算的场景,例如,斐波那契数列;

miaoyl的博客 2071

设计模式学习—备忘录模式(Memento Design Pattern)

设计模式之备忘录模式,行为型模式

闲鱼的博客 548

设计模式教程:备忘录模式(Memento Pattern)

在不暴露对象实现细节的情况下,保存一个对象的内部状态,并在需要时恢复该状态。

遇见伯灵说的博客 1096

秒懂设计模式之备忘录模式(Memento Pattern)

[版权申明] 非商业目的注明出处可自由转载 博文地址: 出自:shusheng007 设计模式汇总篇,强烈建议要点赞收藏: 永不磨灭的设计模式(有这一篇真够了,拒绝标题党) 概述 备忘录模式听起来特别高深,其实可能写过几年代码的都不知不觉的用了很多次了。模式的名称其实已经很形象的反映出其作用了:就是为了在某一时刻把当前的状态记录下来,以后再恢复到那时的状态。 类型 行为型(behavioral) 难度 2颗星 定义 在不破坏封闭的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以将对象.

ShuSheng007的程序人生 2130

设计模式-16备忘录模式Memento Pattern

摘要:备忘录模式 (Memento Pattern) 备忘录模式是一种行为设计模式,用于在不破坏对象封装的前提下保存和恢复对象状态。它通过三个核心角色实现:Originator(原发器)负责创建和恢复状态、Memento(备忘录)存储状态快照、Caretaker(管理者)管理备忘录历史记录。该模式适用于需要实现撤销/重做功能、事务回滚或状态检查点的场景,如文本编辑器保存历史版本。典型实现中,Originator创建包含当前状态的Memento对象,Caretaker维护这些备忘录栈以实现状态回溯,整个过程保

d3y1`5 81_09 1018

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 备忘录模式(Memento Pattern) - Java实现

设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 备忘录模式(Memento Pattern) 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

Z 414

(18)Java设计模式 - 备忘录模式(Memento Pattern)

备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。何时使用:很多时候我们总是需...

潘建南的博客 903

设计模式(Design pattern)之备忘录模式(Memento Pattern)

摘要:备忘录模式是一种保存和恢复对象状态的设计模式。通过GameRole类作为发起人,内部使用RoleParameterMemento类实现Memento接口来保存角色状态(生命值、攻击值、防御值)。RoleMementoCaretaker作为负责人管理备忘录对象。示例中,角色初始状态为100/100/100,战斗后变为0/0/0,通过备忘录成功恢复到初始状态。该模式实现了数据封装,只有发起人能访问备忘录内容,其他类只能操作备忘录对象。

RR1335 之代码才是动力源 175

【设计模式】——备忘录模式(Memento Pattern)

备忘录模式(Memento Pattern),又称快照模式(Snapshot Pattern),属于行为型设计模式。该模式的主要目的是在不破坏对象封装性的前提下,捕获并保存一个对象的内部状态,以便在需要时能够恢复该对象到原先的状态。本文将详细介绍备忘录模式的概念、实现步骤及其在C++中的应用。

J^T的博客 1376
上一篇: 设计模式--享元模式
下一篇: 算法--两数之和
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值