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

使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分 American fuzzy lop 是一款面向安全的模糊测试器,它采用一种新型的编译时插桩和遗传算法,可以自动发现干净、有趣的测试用例,从而触发目标二进制文件中新的内部状态。这显著提高了模糊测试代码的功能覆盖率。AFL 的地址是它已经有一段时间没有更新了。虽然 AFL 仍然运行良好,但有一个新项目 AFL++,它是 AFL 的一个分支,包含许多改进和新功能。AFL++ 的地址是,其源代码位于。在本文中,我们将研究如何使用 AFL++ 对 IoT 二进制文件进行模糊测试。 阅读详情

场景

  • 录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,此时需要恢复上一个人的资料,再进行修改。
  • Word文档编辑时,突然电脑死机或断电,再打开时,可以看到word提示你恢复到以前的文档
  • 管理系统中,公文撤回功能。公文发送出去后,想撤回来。

核心

  • 就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态
  • 结构
    • 源发器类Originator
    • 备忘录类Memento
    • 负责人类CareTaker :可以通过List或者栈来保存多个备忘
      这里写图片描述

开发中的场景

  • 数据库管理软件中,事务管理中的回滚操作
  • 普通软件中的撤销操作

代码

  • Emp
package com.coderbean.memento;

/**
 * Created by Chang on 15/10/5.
 * 源发器类
 */
public class Emp {
    private String name;
    private int age;
    private double salary;

    //进行备忘录操作,并返回备忘录对象
    public EmpMemento memento(){
        return new EmpMemento(this);
    }

    //进行数据恢复
    public void recovery(EmpMemento empMemento){
        this.name = empMemento.getName();
        this.age = empMemento.getAge();
        this.salary = empMemento.getSalary();
    }

    public Emp(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}
  • EmpMemento
package com.coderbean.memento;

/**
 * 备忘录类
 * Created by Chang on 15/10/5.
 */
public class EmpMemento {
    private String name;
    private int age;
    private double salary;

    public EmpMemento(Emp emp) {
        this.name = emp.getName();
        this.age = emp.getAge();
        this.salary = emp.getSalary();
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}
  • CareTaker
package com.coderbean.memento;

/**
 * 负责人类
 * Created by Chang on 15/10/5.
 */
public class CareTaker {
    private EmpMemento memento;


    public EmpMemento getMemento() {
        return memento;
    }

    public void setMemento(EmpMemento memento) {
        this.memento = memento;
    }
}
  • Client
package com.coderbean.memento;

/**
 * Created by Chang on 15/10/5.
 */
public class Client {
    public static void main(String[] args) {
        CareTaker taker = new CareTaker();
        Emp emp = new Emp("张博",18,10000);
        System.out.println("第一次创建对象--"+emp.getName()+"----"+emp.getAge()+"----"+emp.getSalary());
        taker.setMemento(emp.memento());

        emp.setName("Tom");
        emp.setAge(80);
        emp.setSalary(18);

        System.out.println("第二次创建对象--"+emp.getName()+"----"+emp.getAge()+"----"+emp.getSalary());

        emp.recovery(taker.getMemento());

        System.out.println("第三次创建对象--"+emp.getName()+"----"+emp.getAge()+"----"+emp.getSalary());
    }
}
华为OD机试双机位C卷-统计差异值大于相似值二元组个数(C/C++/Py/Java/Js/Go) 华为OD机试(机考)双机位C卷 【统计差异值大于相似值二元组个数】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 统计差异值大于相似值二元组个数 阅读详情

相关推荐

Flow Matching实战:5步搞定图像生成模型优化(附PyTorch代码)

本文提供了一份基于Flow Matching框架优化图像生成模型的实战指南。通过五个关键步骤,详细讲解了从环境配置、核心概念梳理到构建向量场网络、设计损失函数、编写训练循环以及选择ODE求解器进行采样的完整流程,并附有可运行的PyTorch代码,帮助开发者快速掌握这一高效的生成式建模技术。

weixin_29065959的博客 319

GOF23设计模式-行为型模式10-备忘录模式(Memento)

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

Tumbler 223

Starlink第三代终端和第二代终端的差异性有哪些?

starlink第三代终端和第二代终端的额差异

chen2jiang3的博客 2924

GOF23设计模式之备忘录模式(memento)

一、备忘录模式概述   保存某个对象内部状态的拷贝,使得以后就可以将该对象恢复到原先的状态。   结构:     (1)源发器类 Originator        负责创建一个备忘录 Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。     (2)备忘录类 Memento        负责存储 Originator 对象的内部状态,并可防止 ...

dcpvpf6917的博客 203

在PLC中将十六进制数据转换为浮点数(通常遵循IEEE 754标准)需要理解数据存储格式,并按以下步骤操作:

通过以上步骤,您可以在PLC中实现十六进制到浮点数的转换。T DBD20 // 将数据传送到浮点数变量(如DB1.DBD20)指数位(8位):实际指数 = 存储值 - 127(偏移量)。:必须确认PLC的存储顺序(大端或小端),否则结果错误。将两个16位寄存器合并为32位数据,需注意。尾数位(23位):隐含前导1,实际值为。:确保32位数据在寄存器中连续且对齐。符号位(1位):0表示正,1表示负。:高位寄存器在前(如西门子PLC)。:低位寄存器在前(如三菱FX系列)。,误差因截断导致)。

K11mvp的博客 4416

从Canny到深度学习:边缘检测指标进化史(含ODS/OIS/AP的数学推导)

本文系统梳理了边缘检测评估指标的演进历程,从经典的Canny算子到深度学习时代,重点解析了ODS、OIS和AP三大核心指标的设计哲学与数学推导。文章深入探讨了基于PR曲线的评估体系,揭示了不同指标(如ODS与OIS)在阈值优化上的差异,并分析了AP指标在边缘检测任务中的优势与局限,为算法研究和模型评估提供了实用指南。

b9c0d的博客 199

19-备忘录模式Quarkus实现

摘要:本文用一个实例场景描述Gof 23设计模式中的备忘录(Memento)模式,并用Quarkus框架代码给予实现,同时也给出实现代码的UML模型。 关键字:Gof 23 设计模式 备忘录模式 Quarkus 1 基础知识 1.1 标准定义 备忘录(Memento)模式标准定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 1.2 分析和说明 备忘录(Memento)模式属于对象行为型模式。备忘录对象是一个用来存储另外一个对象内部状

rengang66的博客 365

Cadence PSpice 模型1:基于自带库新建二极管的PSpice模型图文教程

使用Cadence PSpice进行电路图的仿真时,难免会遇到软件自带库中没有合适的元器件的情况,这就需要设计师自己新建元器件模型,本文详细介绍使用PSpice软件修改自带库的元器件模型的参数以得到自己需要的PSpice模型库的方法。

fydar的博客 4413

用 SAP XCO XLSX 模块优雅读 Excel:坐标、选择模式与实战案例全解析

SAP ABAP Cloud 中的 XCO XLSX 模块为 Excel 文件处理提供了官方解决方案。文章介绍了三个核心概念:通过 XCO_CP_XLSX=>DOCUMENT 获取文档句柄;使用 CL_XCO_XLSX_COORDINATE 坐标系统定位单元格;利用 Selection Pattern 精确读取数据区域。这些功能在 RAP 批量导入等业务场景中尤为实用,相比传统方案更加简洁可靠。文章还分享了真实项目中的最佳实践,如动态列定位和相对偏移技巧,帮助开发者构建更健壮的 Excel 导入逻辑。

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

LPDDR5 物理层一致性测试(连载・下):电平、过冲下冲与 Rx 接收眼图 Mask 掩模完整指标解读

本文系统梳理LPDDR5物理层一致性测试全流程,涵盖差分/单端电平、边沿斜率、交叉点电压、过冲下冲及CS/CA/DQ接收眼图掩模(Rx Mask)测试,详解各参数定义与工程实操要点。强调配置需与DRAM MR寄存器同步,突出差分≠合格、面积积分不可忽视、掩模失败优先排查参考电压与信号完整性等高频坑点,为硬件调试与SI工程师提供权威参考。

一只豌豆象的博客 39

【Go实现】实践GoF的23种设计模式:备忘录模式

在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外进行保存,以便在未来将对象恢复到原先保存的状态。

ruanrunxue的博客 1216

双目相机标定理论与编程实现

双目相机标定是计算机视觉中的重要任务,通过确定双目相机的内参和外参,可以实现立体视觉的深度感知和三维重建。通过使用OpenCV库提供的函数,我们可以方便地进行双目相机的标定工作。双目相机标定是计算机视觉中的重要任务,用于确定双目相机的内参和外参,以实现立体视觉的深度感知和三维重建。通过上述代码,我们可以获得左右相机的内参矩阵、畸变系数、旋转矩阵和平移矩阵等参数,从而完成双目相机的标定过程。使用双目相机采集一系列左右相机的图像,确保标定板在不同位置和角度下都能被双目相机拍摄到。函数来检测标定板的角点。

ByteKnight的博客 324

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

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

星Yeah 的博客 1641

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

备忘录模式(Memento Pattern),也称为快照模式或Token模式,是GoF(Gang of Four,四位设计模式专家)提出的23种设计模式之一,属于行为模式。该模式的主要目的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在适当的时候能够恢复到原先的状态。以下是一个简单的备忘录模式(Memento Pattern)的Java代码示例。类,它有一个内部状态,并可以创建和恢复其状态的备忘录。对象,并将其中的状态设置回。对象,其中包含当前的。类中,我们创建了一个。

IT深耕十余载,大道之简 804

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

Java设计模式 -23- 备忘录模式(Memento 模式)前言 前言 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式是 GoF 设计模式中最为庞大的一类,它包含以下 11

Android系统工程师--小馬佩德罗 522

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

GOF23设计模式之备忘录模式

备忘录模式,通过对之前的数据进行备份,当需要恢复之前的数据可以直接恢复。常见于恢复文档历史版本。

开心杨的个人博客 312

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

Memento模式也叫备忘录模式,是由GoF提出的23种软件设计模式的一种。Memento模式是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。 本文介绍设计模式中的(Memento)模式的概念,用法,以及实际应用中怎么样使用Memento模式进行开发。 Memento模式的概念 Memento模式是行为模式之一,它的作用是...

iteye_14076的博客 232

Go语言实现GoF设计模式:备忘录模式的实践探索

在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外进行保存,以便在未来将对象恢复到原先保存的状态。

华为云官方博客 752

GoF 23 备忘录模式

在不破坏封装的前提下,捕获和外化一个对象的内部状态,这样以后就可以将该对象恢复到原先保存的状态。参考文档http//www.javier8a.com/itc/bd1/articulo.pdf。备忘录模式(memento)

loveme888的专栏 206

设计模式之备忘录模式(Memento)摘录

设计模式之备忘录模式(Memento)摘录!

网络资源是无限的 2238

GOF设计模式

设计模式的使用: 首先,设计模式有其应用的场合,不相宜的场合乱用设计模式有害无益;其次,设计模式主要解决对象之间相互通信、 相互依赖的结构关系。 在描述一个设计模式时,至少需要包含四个方面:模式名称(Pattern name)、问题(Problem)、解决方案(Solution)、效果(Consequence)。 设计模式要有自己的名称。 设计模式的目的就是解决问题。 ...

程序员杂谈 7757

23种设计模式 3 行为型模式 之3.5 memento 备忘录/快照模式

本文基本是搬运,搬运自网友k_eckel 的书籍《设计模式精讲-GoF 23种设计模式解析附C++实现源码》

刀法孜然的博客 387

D23:C#设计模式之二十二备忘录模式(Memento Pattern)【行为型】

一、引言 今天我们开始讲“行为型”设计模式的第十个模式,该模式是【备忘录模式】,英文名称是:Memento Pattern。按老规矩,先从名称上来看看这个模式,个人的最初理解就是对某个对象的状态进行保存,等到需要恢复的时候,可以从备忘录中进行恢复。生活中这样的例子也能经常看到,如备份电话通讯录,备份操作操作系统,备份数据库等。如果我们想恢复对象的状态,那么我们可能首先想到的是把对象保存下来,...

. 632

Java设计模式之《备忘录模式》

备忘录模式是一种行为型设计模式,用于在不破坏封装的前提下保存和恢复对象状态。该模式包含三个核心角色:Originator(负责创建和恢复状态)、Memento(存储状态快照)和Caretaker(管理备忘录对象)。适用于需要撤销操作(如文本编辑器)或状态恢复的场景。其优点在于良好的封装性和状态管理能力,但存在内存占用较大和性能开销的缺点。通过将对象状态保存在外部,实现了对象状态的可恢复性,同时保持了内部状态的封装性。

weixin_50055999的博客 1486
上一篇: GOF 23 设计模式之 观察者模式(Observer)
下一篇: 正则表达式(Regular Expression)教程
coderbean
博客等级 码龄11年 12粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值