首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++设计模式 - 备忘录模式

源码实现 「编程环境」 编译环境: Linux环境 语言: C++语言 编译命令: make 「工程结构」 Memento/ ├── caretaker.cc ├── caretaker.h ├── main.cc...在设计阶段要杜绝这种可能。...因此我们可以设计一个阈值机制,当达到阈值,抛弃备忘录最原始的版本。这么一看备忘录设计成栈结构比较合适,先进后出。...「备忘录模式」的实现相对简单,也不唯一,在满足备忘录模式思想的情况下,实现方式合理即可。 另外,这么多的设计模式,不要纠结于该使用哪种,结合具体场景可选择一个或多个设计模式都是可行的。...更多文章内容包括但不限于C/C++、Linux、开发常用神器等,可进入“开源519公众号”聊天界面输入“文章目录” 或者 菜单栏选择“文章目录”查看。公众号后台聊天框输入本文标题,在线查看源码。

20940
您找到你想要的搜索结果了吗?
是的
没有找到

学以致用C++设计模式 之 “备忘录模式”

生活如此,程序也是如此,备忘录模式是一个很常用的模式,或者说,备忘录的功能是很多人都需要实现的,也有些人想实现却不知道怎么实现,嫌麻烦。不然我上一篇备忘录,也不至于就那么点访问量有那么高收藏量。...//主函数 int main() { Originator *o = new Originator(); o->set_state("A"); o->show(); Caretaker *c...= new Caretaker(); c->memento = o.Create_Memento();//保存状态。...有管理类挡在前面,很好的隐藏了备忘录类的实现细节 o->set_state("B"); //更改状态 o->show(); o->set_memento(c->memento); //恢复状态...注意事项 备忘录的生命周期,要主动管理它的生命周期,不使用就删了。 备忘录的性能:不要在频繁建立备份的场景中使用备忘录模式,因为控制不了备忘录建立的数量。

27030

备忘录设计模式

备忘录设计模式是一个行为设计模式,它能够在不破坏对象的封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。...基本概念 备忘录模式由三部分组成: Originator(发起人):创建一个备忘录并存储其当前的内部状态;还可以使用备忘录来恢复其内部状态。...使用场景 备忘录设计模式主要在以下情景中使用: 当你需要保存和加载对象的时刻快照,同时避免暴露对象的实现细节。 当直接访问对象会破坏封装性,并且引导其他冗余问题或限制时。...下面是使用C#实现备忘录模式的例子: public class Originator { private string _state; public void SetState(string...originator.GetStateFromMemento(careTaker.Get(1)); Console.WriteLine("Second saved State: " + originator.GetState()); 结论 备忘录模式是一种非常有用的设计模式

12230

设计模式-备忘录模式

备忘录模式是什么? 备忘录模式(Memento Pattern),属于行为模式,定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便恢复到原先保存的状态。...Caretaker(备忘录管理员角色):负责管理备忘录,只负责将备忘录内容进行传递; 备忘录模式可以干嘛?...备忘录将当前的对象,通过一个存储容器,将该对象或对象的一些内部状态信息,存储一份,然后通过该备份,当原对象需要恢复的时候通过备忘录管理员角色,对原有的备忘录数据进行恢复。...优点: 遵循迪米特法则:由于角色的备份信息由备忘录管理员角色,只负责管理,而不能直接去修改备忘录的信息,并且该备忘录最终操作也由发起人来决定是否恢复。...备忘录模式类图 ?

36640

c语言程序设计总结心得-C语言程序设计小结

真正的程序设计高手不是语法上的精通而是程序总体架构,算法上的周密。...当初大学时都是利用C51写的51单片机的程序,根本就不管程序的可维护性,程序大小c语言程序设计总结心得,就是一个C文件中包含了全部的函数体。在工作中这是一个完全不能接受的习惯和致命错误。   ...2.c文件c语言程序设计总结心得,和h文件设计的要求。C语言显得非常的自由,但我们在工作中为了程序软件的种种原因,一定要规范自己的写法,这对自己和他人都是有利的。...C语言的特色就在于它的指针。很好的使用指针能让我们的程序更加的有条理性,同样它也是C语言中语法最难的一点了,所以在使用时一定要注意。...总之,C语言算是一门很好的语言,我们不仅要学会它的语句,更重要的是要具有好的思想,思想有多深,就决定你能飞多远! 本文共 998 个字数,平均阅读时长 ≈ 3分钟

3.7K60

设计模式-备忘录模式

该模式涉及到3个角色: 发起人角色:Originator,该角色包含备忘录对象,备忘录对象存储了他的状态; 负责人角色:Caretaker,该角色保存备忘录对象,但不检查备忘录对象内容; 备忘录角色:Memento...public static void main(String[] args) { Originator o=new Originator(); Caretaker c=...new Caretaker(); //发起人状态改变 o.setState("Start"); //负责人保存这个备忘录 c.saveMemento...new Caretaker2(); //发起人状态改变 o.setState("Start"); //负责人保存这个备忘录 c.saveMemento...()); } }/** 最后结论和之前的一样,但在设计上面已经很不同 */ 有时候发起人内部信息需要保存在别的地方,但是读取还是发起人自己,此时备忘录模式就可以把发起人信息对外封闭起来。

39620

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

---- 角色 Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器,需要被数据备份的对象...备忘录设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用,原发器的设计在不同的编程语言中实现机制会有所不同。...备份的数据会有多份,因此需要有一个类来管理这些备份 备忘录模式的核心是备忘录类以及用于管理备忘录的负责人类的设计。...悔棋可能回到上一步,也有可能回到上上次的状态…因此需要记录多次的状态 在设计备忘录类时需要考虑其封装性,除了Originator类,不允许其他类来调用备忘录类Memento的构造函数与相关方法,...备忘录实现了对信息的封装,一个备忘录对象是一种原发器对象状态的表示,不会被其他代码所改动。备忘录保存了原发器的状态,采用列表、堆栈等集合来存储备忘录对象可以实现多次撤销操作。

20810

设计模式-备忘录模式

定义 备忘录模式(Memento Pattern):是一种行为型设计模式,它定义了一个对象的内部状态,这个对象将状态保存下来,以便稍后恢复。...备忘录模式的关键点如下: 定义一个接口,用于定义备忘录对象的操作。 在接口中声明一个方法,用于创建一个备忘录对象。 在接口中声明一个方法,用于将备忘录对象的状态进行修改。...定义一个静态变量,用于存储备忘录对象的实例。 创建备忘录对象时,将一个指向对象的引用赋值给静态变量。 调用接口中的方法创建备忘录对象时,将对象的引用传递给静态变量。...,并将当前状态保存到备忘录对象中。...createMemento()方法创建备忘录对象,并将当前状态保存到备忘录对象中。restore()方法用于从备忘录对象中恢复先前的状态。 Memento类表示备忘录对象,它包含需要保存的状态。

15320

设计模式~备忘录模式

存储这些快照的备忘录对象叫做此对象的历史;某个快照所处的位置叫做检查点。 备忘录角色(Memento) 备忘录角色由如下责任: 1. 将发起人(Originator)对象的内部状态存储起来。...备忘录可以根据发起人对象的判断来决定存储多少发起人对象的内部状态。 2.备忘录可以保护器内容不被发起人(Originator)对象之外的任何对象所读取。...备忘录有两个等效的接口:   窄接口:负责人(Caretaker)对象(和其他除发起人之外的任何对象)看到的是备忘录的窄接口(narrow interface),这个窄接口只允许它把备忘录对象传给其他的对象...发起人角色(Originator) 发起人角色有如下责任: 创建一个含有当前的内部状态的备忘录对象 使用备忘录对象存储其内部状态。...负责人角色(Caretaker) 负责人角色有如下责任: 负责保存备忘录对象 不检查备忘录对象的内容 备忘录模式的白箱实现 ? 源代码清单:

35520

设计模式-备忘录模式

CCaretaker: 备忘录管理类。内部持有备忘录表,负责备忘录表的管理,实现备份和回退功能。...源码实现 编程环境 编译环境: Linux环境 语言: C++语言 编译命令: make 工程结构 Memento/ ├── caretaker.cc ├── caretaker.h ├── main.cc...在设计阶段要杜绝这种可能。...因此我们可以设计一个阈值机制,当达到阈值,抛弃备忘录最原始的版本。这么一看备忘录设计成栈结构比较合适,先进后出。 备忘录模式的实现相对简单,也不唯一,在满足备忘录模式思想的情况下,实现方式合理即可。...另外,这么多的设计模式,不要纠结于该使用哪种,结合具体场景可选择一个或多个设计模式都是可行的。多数情况下,存在多种设计模式相互配合完成某种组件或场景的实现。

28920

设计模式——备忘录模式

设计模式——备忘录模式 强烈推介IDEA2020.2破解激活,IntelliJ...而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作。 【3】备忘录模式属于行为型模式。...二、备忘录模式的结构与类图 ---- 忘录模式的核心是设计备忘录类以及用于管理备忘录的管理者类,备忘录模式的主要角色如下: 【1】发起人(Originator)角色:记录当前对象的内部状态信息,提供创建备忘录和恢复备忘录数据的功能...【3】管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。 ?...所属专题 设计模式

36340

设计模式--备忘录模式

备忘录模式(Memento Pattern)是一种行为设计模式,其目的是在不破坏对象封装性的前提下,捕获并外部保存对象的状态,并在日后将该对象状态恢复到之前的某个状态。...备忘录模式包括三个角色: Originator:原发器,创建需要存储的备忘录对象,以保存对象的状态。 Memento:备忘录,保存原发器状态的对象。 Caretaker:管理者,负责保存和恢复备忘录。...在没有访问备忘录内部状态的前提下负责保护备忘录。 以下是一个使用C#编写的备忘录模式的经典代码实例。实例中,我们使用备忘录模式记录一个数字的历史状态,并支持撤销到之前的某个状态。..._value = value; } public int GetValue() { return _value; } } // 原发器类,用于创建备忘录和恢复备忘录...History类则表示备忘录的管理者,包含一个Stack用于保存备忘录对象。通过这个例子,我们可以看到如何使用备忘录模式来记录对象的历史状态,并支持恢复到之前的某个状态。

16430

备忘录设计模式解读

---- 问题引进 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御力下降,从备忘录对象恢复到大战前的状态 传统方案解决游戏角色恢复...备忘录模式基本介绍 基本介绍 1) 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。...这样以后就可将该对象恢复到原先保存的状态 2) 可以这里理解备忘录模式:现实生活中的备忘录是用来记录某些要去做的事情,或者是记录已经达成的共同意见的事情,以防忘记了。...而在软件层面,备忘录模式有着相同的含义,备忘录对象主要用来记录一个对象的某种状态,或者某些数据,当要做回退时,可以从备忘录对象里获取原来的数据进行恢复操作 3) 备忘录模式属于行为型模式 备忘录模式的原理类图...数据库的事务管理 5) 为了节约内存,备忘录模式可以和原型模式配合使用

13750

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券