【设计模式学习笔记】备忘录模式

BLDC方波控制双闭环Simulink仿真模型 无刷直流电机方波控制双闭环Simulink仿真模型搭建详细教程,包括速度PI环、电流PI环、换向逻辑和受控电压源,仿真结果良好。 阅读详情

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

文章目录

1.1 首先改造我们的车

1.2 备份

1.3 备忘录

1.4 恢复

1.5 结果

参考

最近我们车厂决定要扩建一个维修厂,这个维修厂可以让让用户的车恢复到之前的任意状态。是不是很牛?!

1.1 首先改造我们的车

package memento;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class CarRecord {
    private String name;

    public String getName() {
        return name;
    }

    public String getNameFromMemList(int index) {
        String name = MemList.getMemRecord(index).getName();
        this.name = name;
        return  name;
    }

    public void changeName(String name){
        this.name = name;
        new MemRecord(name);
    }

    public CarRecord(String name) {
        this.name = name;
        new MemRecord(name);
    }
}

 这里简单说一下类中的方法作用。
getNameFromMemList从备忘录中获取,车之前的名字,index是索引。
changeName这个方法支持用户随意设置名字。
new MemRecord(name);这条语句将名字存放到一个备忘录中。具体见下。

1.2 备份

package memento;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class MemRecord {
    private String name;

    public String getName() {
        return name;
    }

    public MemRecord(String name) {
        this.name = name;
        MemList.addMemRecord(this);
    }
}

 为什么要有这个类,这个类的作用是复制一份CarRecord。你想啊,我们将同一个引用类型加到List中。那我们还能备份吗?

1.3 备忘录

你之前对车的所有操作都会存在这里。

package memento;

import java.util.ArrayList;
import java.util.List;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class MemList {
    private static List<MemRecord> mems;

    static{
        mems = new ArrayList<>();
    }
    private MemList(){}

    public static MemRecord getMemRecord(int index) {
        return mems.get(index);
    }
    public static void addMemRecord(MemRecord mem) {
        mems.add(mem);
    }
}

1.4 恢复

package memento;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/15 0015 15:41】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        CarRecord carRecord = new CarRecord("aaaa");
        carRecord.changeName("bbbbb");
        carRecord.changeName("ccccc");
        carRecord.changeName("ddddd");
        carRecord.changeName("eeeee");

        System.out.println(carRecord.getName());
        System.out.println(carRecord.getNameFromMemList(1));
        System.out.println(carRecord.getName());
    }
}

1.5 结果

简单运行之后,看我们的车就恢复到了bbbbb状态。heihei

 

参考

【菜鸟教程】:http://www.runoob.com/design-pattern/memento-pattern.html

 本文原文地址:https://blog.youkuaiyun.com/baidu_30325009/article/details/85028400

基于STM32+Qt上位机设计的智慧停车场管理系统(207) 本项目设计了一套基于STM32+Qt上位机的智慧停车场管理系统。该系统融合了先进的嵌入式技术、图像识别技术、数据库技术和移动互联网技术,通过STM32硬件端实时采集车库现场信息,包括车牌识别、车位占用状态监测等,并将数据上传至Qt上位机进行处理与展示。利用MySQL数据库存储车辆出入库记录及车位使用情况,确保数据的安全性和可追溯性;通过Android手机APP为用户提供查询、支付等功能,实现远程交互与便捷服务。 阅读详情

相关推荐

Win11任务栏图标消失?快速恢复指南

任务栏图标消失是Windows 11操作系统中常见的问题之一,但通过上述方法,用户通常可以轻松解决这一问题。无论是重启Windows资源管理器、使用命令提示符修复、检查系统更新和设置,还是考虑重装系统,都可以帮助用户恢复任务栏图标的正常显示。希望本文的介绍能对用户有所帮助,让Windows 11的使用更加顺畅和愉快。

mmoo_python的博客 5409

学习笔记【23种设计模式-第十九节:Memento Pattern 备忘录模式】

Memento Pattern 备忘录模式 简述 备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同的意见的事情,以防忘记。在软件层面,备忘录模式有着相同的意义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。 备忘录模式属于行为型模式。 角色 Originator

qq_53273362的博客 154

linux离线安装nginx

linux离线安装nginx

zhang_130914036的博客 9347

设计模式学习笔记--备忘录模式

一.简介 今天来学习一下设计模式中的备忘录模式。说到这个模式,也许不太熟悉,不过相信写代码的时候,写错了之后,Ctrl+Z的功能用得还是比较多的,比如Word,Photoshop等编辑软件中,撤销功能都是必不可少的。而备忘录模式就是一个很好地实现撤销功能的一种设计模式。它可以让我们的系统恢复到之前的状态,嗯哼,传说中的月光宝盒! 下面看一下备忘录模式的定义以及UML类图:  在不破坏

puppet_master的专栏 1450

离散数学 --- 图论基础 --- 图的同构,通路与回路,可达性与最短通路

同一个图(这里的图是抽象的数学定义)可以有不同的图形表示方法1.重数:两点之间的平行边的个数1.得到 n!的过程,一个图中的一个结点在另一个图中对应的结点有n种可能(黄框中定义的图来讨论),这个对应好后下一个结点有 n - 1 种可能,再下一个有n-2种,直到最后一个为1,所有可能的结果就等于 n * (n - 1) *(n - 2)*....*1 = n!2.虽然说找对应结点很困难,但不是没有规律可循的。比如1.两个相互对应的结点的度数要相同;

qq_51947882的博客 7439

光通信仿真入门:手把手教你用VPI和Matlab搭建第一个联合仿真系统(含避坑指南)

本文详细介绍了如何使用VPI和Matlab搭建光通信联合仿真系统,涵盖软件配置、链路搭建、数据交互等关键环节,并提供常见问题的解决方案。特别适合初学者快速掌握光通信仿真技术,避免常见错误,提升仿真效率。

weixin_28733637的博客 377

设计模式学习笔记——18 备忘录模式

备忘录模式 备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 优点: 有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 本模式简化了发起人类。发起人不再需要管...

GM. 203

Cadence Virtuoso里搞定斩波运放AC仿真:PSS+PAC保姆级设置避坑指南

然而,当工程师们尝试在Cadence Virtuoso环境中对这种特殊结构进行AC特性分析时,往往会遇到传统AC仿真方法失效的困境——这正是PSS(Periodic Steady-State)与PAC(Periodic AC)仿真组合大显身手的场景。实际项目中我们常采用"先快后精"的两步法:先用快速设置确认大体趋势,再针对关键频段进行精细仿真。例如某次设计迭代中,将harmonics从10增加到20后,发现在1MHz处的相位裕度估算误差达15°,这解释了之前样机测试时的振荡问题。

weixin_33508411的博客 449

设计模式学习笔记---备忘录模式memento pattern(Java版)

一、场景 录入大批人员资料,当正在录入当前人资料时,发现上一个人录错了 此时需要恢复上一个人的资料,再进行修改。 Word文档编辑时,忽然电脑死机或断电,再打开时可以看到word 提示你恢复到以前的文档。 管理系统中,公文撤回功能。公文发送出去后,想撤回来。二、核心 保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。 结构: 一源发器类originator 一备忘

吃果冻不吐果冻皮 1246

ONFI5.0命令字实战指南:从基础操作到高级应用

本文深入解析ONFI5.0协议的核心——命令字,提供从基础操作到高级应用的实战指南。详细拆解了NAND闪存的复位、读状态、数据读取(00-30)、页编程(80-10)和块擦除(60-D0)等关键命令周期,并探讨了多平面操作与缓存操作等高级性能优化技巧,帮助开发者高效、稳定地与NAND芯片进行底层交互。

vscode5coder的博客 462

数据处理和分析之数据聚类:层次聚类(Hierarchical Clustering):单链接层次聚类方法

单链接层次聚类(Single-Linkage Hierarchical Clustering)是凝聚型层次聚类的一种,它基于数据点之间的最小距离来定义聚类间的相似性。在单链接层次聚类中,两个聚类之间的距离定义为这两个聚类中任意两个数据点之间的最短距离。这种聚类方法倾向于形成链状或线性的聚类,因为聚类的边界是由最远的数据点决定的,而不是聚类的平均或中心位置。单链接层次聚类通过计算簇间最近点的距离来决定簇的合并,这种方法简单直观,但可能导致簇的形状不规则,尤其是在数据点分布不均匀的情况下。

2401_87715305的博客 1442

设计模式学习笔记-备忘录模式

游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战boss前保存自身状态,当大战boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 传统方案解决 一个对象,就对应一个保存对象状态的对象,这样不利于管理,开销很大 传统的方式是简单的做备份,new出另一个对象,再把需要备份的数据放到这个新对象,但是这就暴露了对象内部细节 备忘录模式 基本介绍 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将对象回复到原先保存的状态 备忘录对象主要用来记录

我不是什么好人 292

33、密码学中的选择密文攻击与Cramer - Shoup加密方案

本文详细介绍了密码学中选择密文攻击的背景及其对Cramer-Shoup公钥加密方案的影响。该方案在决策Diffie-Hellman假设和抗碰撞哈希函数的基础上,能够有效抵御自适应选择密文攻击,并且其安全性无需依赖随机预言机模型。文章还分析了Cramer-Shoup方案的设计原理、加密与解密过程,以及其在标准假设下的安全性证明方法。此外,通过一系列相关练习,帮助读者进一步理解密码学概念如密文不可区分性、ElGamal加密、Goldwasser-Micali方案等。最后,文章展望了密码学的未来发展趋势,包括量子

vscode6remote的博客 99

《设计模式》学习笔记——备忘录模式

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

smallerxuan的博客 1955

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

c++设计模式之备忘录模式 学习笔记

先说一下定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 举一个几乎所有人都深有体会的例子:游戏进度的保存。比如我最近玩的生存游戏******,里面人物有:生命值,饥饿值,体力值。背包里还有各种物品。为了避免人物死掉丢失数据,我们会时不时的保存一下。这里面保存的就是当时的人物数据,可以用到备忘录模式。 介绍一下备忘录模式在游戏保存这个例子中都有哪几个类:人物类(就是游戏里的人物,该类拥有游戏中的人物中的所有属性和东西),保存内容类(该类中封装了需要保存的人物类中的内容),保

超级无敌大泡泡的博客 173

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式学习笔记——备忘录模式

备忘录模式的应用场景,可以想一下游戏存档。备忘录模式主要由三部分组成:原发器(Originator)、备忘录(memento)、Caretaker(负责人)。其中:原发器:相当于游戏,可以创建备忘录,使用备忘录;备忘录:相当于存档负责人:存储备忘录。只负责存储,但不能操作备忘录。通常用数组存储一系列备忘录。

左直拳的马桶_日用桶 2384

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

设计模式学习笔记20 - Java版之备忘录模式

文章目录1. 需求2. 传统方案2.1 方案2.2 分析3. 备忘录模式3.1 基本介绍3.2 原理类图3.3 实际应用3.4 细节 1. 需求 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 2. 传统方案 2.1 方案 2.2 分析 一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象...

liyang_007的博客 494

设计模式学习笔记(二十)备忘录模式

原发器类(Originator)1、原发器类是需要保存状态并支持状态恢复的对象。2、原发器类具有访问和修改内部状态的方法,并能够创建备忘录对象来保存当前状态或从备忘录对象中恢复之前的状态。当原发器需要保存状态时,它会创建一个备忘录对象,并将自己的状态传递给备忘录对象,使其保存。当需要恢复到之前的某个状态时,原发器可以从备忘录对象中获取相应的状态值,并将其设置为当前状态。备忘录类(Memento)1、备忘录类是用于存储原发器对象的内部状态。

weixin_44917291的博客 305

C#设计模式学习笔记:(22)备忘录模式

本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/8176974.html,记录一下学习过程以备后续查用。 一、引言 今天我们要讲行为型设计模式的第十个模式--备忘录模式,先从名称上来看。备忘录模式可以理解为对某个对象的状态进行保存,等到需要恢复的时 候,可以从备忘录中进行恢复。生活中这样的例子也能经常看到,如备份电话通讯录、...

Globalizationa的博客 466

【学习笔记】设计模式-备忘录模式(Memento)

文章目录0 设计模式1 备忘录模式2 实现思路3 需要的类4 具体实现4.1 Memento(备忘录)4.2 Originator(目标对象)4.3 CareTaker(管理者)4.4 测试类5 思维导图6 示例源码地址最后 0 设计模式 不了解设计模式的小伙伴可以通过这篇文章了解一下什么是设计模式 https://blog.youkuaiyun.com/qq_42874315/article/details/120006447 1 备忘录模式 备忘录模式主要的作用是保存一个对象的某个状态,以便在适当的时候恢复对象。备

五条的博客 660

游戏设计模式学习笔记(17)备忘录模式

游戏设计模式学习笔记(17)备忘录模式 参考: 《设计模式与游戏完美开发》 《游戏编程模式》(https://github.com/tkchu/Game-Programming-Patterns-CN) 《图说设计模式( Graphic Design Patterns)》(https://github.com/me115/design_patterns) 【游戏设计模式】浅墨_毛星云: http...

l773575310的博客 253

设计模式学习笔记:备忘录模式(Memento)

文章目录一、备忘录模式简介二、适应场景三、示例演示四、测试示例 拥有乐观的心态很重要,它能让工作和生活更加美好。 一、备忘录模式简介 备忘录模式是设计模式中行为型模式的一种。备忘录模式用于保存对象的状态,以便于在合适的时候恢复对象。 备忘录模式使用三个角色:Memento(备忘)、Originator(发起者)、Caretaker(备忘管理者)。 二、适应场景 需要保存/恢复数据的相关场景。 提供一个可回滚的操作。 例如:游戏存档、windows 系统的 ctrl + z 、数据库的事务等。 三、示

爱辰 290
上一篇: 【设计模式学习笔记】享元模式
下一篇: 【设计模式学习笔记】多例模式
Roger_CoderLife
博客等级 码龄1天 211粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值