[设计模式]备忘录模式(Memento)

IBM Storwize V3700存储维护实战:硬盘更换、电源模块热插拔与带外管理IP配置 在企业IT基础设施中,存储阵列是数据持久化的核心组件,其稳定运行直接关系到业务连续性。存储阵列通常采用RAID技术实现数据冗余,并通过热插拔、冗余电源等设计保障高可用性。带外管理则提供了独立于业务网络的硬件级监控与管理通道,是运维的关键手段。本次实战以一台IBM Storwize V3700存储阵列为例,详细记录了在业务低峰期,依据严谨的操作流程,对出现SMART预警的硬盘进行在线更换,并对有异响的冗余电源模块实施热插拔更换。针对管理界面强制要求设置VIP才能配置带外管理地址的限制,文章提供了通过SSH命令 阅读详情

1.意图

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

2.动机

       有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消机制,你必须事先将状态信息保存在某处,这样才能将对象恢复到它们先前的状态。但是对象通常封装了其不封或所有的状态信息,使得其状态不能被其他对象访问,也就不可能在该对象之外保存其状态。而暴露其内部状态又将违反封装的原则,可能有损应用的可靠性和可扩展性。

3.结构与参与者


4.效果

1)保持封装边界

        使用备忘录就是为了封装原发其的信息,这样既可返回原来的状态,也使得信息不暴露。面向接口编程。

2)它简化了原发器

        在其他的保持封装性的设计中,Originator负责存储客户请求存储的原始状态。现在由Memento类进行存储。

3)使用备忘录可能代价很高(缺)

       如果存储的信息过大,或者操作过于频繁,那么开销会很大,此时备忘录模式就不太合适了。

4)定义窄接口和宽接口

       在一些语言中可能难以保证只有原发器可访问备忘录的状态。

5)维护备忘录的潜在代价(缺)

       管理器负责删除它所能维护的备忘录。然而管理器不知道备忘录中有多少个状态。因此当存储备忘录时,一个本来很小的管理器,可能会产生大量的存储开销。

5.实现

1)语言支持

        备忘录有两个接口:一个为原发其所使用的宽接口,一个为其他对象所使用的窄接口。理想的实现语言应可支持两级的静态保护。在C++中,可将Originator作为Memento的一个友元,并使Memento宽接口为私有,只有窄接口应该被声明为公共的。

2)存储增量式改变

         如果备忘录的创建及其返回(给它们的原发器)的顺序是可预测的,备忘录可以仅存储原发起内部状态的增量改变。

6.代码示例

#include <iostream>
#include <string>
using namespace std;

class Memo;
//封装的数据
class State
{
public:
	State(int health,int attack,int defense):m_health(health),m_attack(attack),m_defense(defense){}
	int GetHealth(){return m_health;}
	int GetAttack(){return m_attack;}
	int GetDefense(){return m_defense;}
	void SetHealth(int health){m_health=health;}
	void SetAttack(int attack){m_attack=attack;}
	void SetDefense(int defense){m_defense=defense;}
private:
	int m_health;
	int m_attack;
	int m_defense;
};
//发起人类
class Originator
{
public:
	Originator(State* state):_state(state){}
    Memo* CreateMemo();
	State* GetState()
	{
		return _state;
	}
	void SetMemo(Memo* memo);
	void Show()
	{
		cout<<"生命值:"<<_state->GetHealth()<<endl;
		cout<<"攻击力:"<<_state->GetAttack()<<endl;
		cout<<"防御力:"<<_state->GetDefense()<<endl;
	}
private:
	State* _state;
};

//备忘录类
class Memo
{
public:
	Memo(State* state)
	{
		_state=new State(state->GetHealth(),state->GetAttack(),state->GetDefense());
	}
private:
	friend class Originator;
	State* GetState()
	{
		return _state;
	}
	State* _state;
};

Memo* Originator::CreateMemo()
{
	return new Memo(_state);
}

void Originator::SetMemo(Memo* memo)
{
	_state = memo->GetState();
}

//管理者类
class Caretaker
{
public:
	Memo* memo;
};
//客户端:
int main()
{	
	void FightBoss(Originator* on);
	State* pState=new State(1000,200,100);
	Originator* on=new Originator(pState);
	Caretaker* ct=new Caretaker();
	cout << "人物初始化完成"<<endl;
	on->Show();
	ct->memo = on->CreateMemo();
	cout << "存档完成"<<endl;
	FightBoss(on);
	on->Show();
	cout << "加载存档"<<endl;
	on->SetMemo(ct->memo);
	on->Show();

	return 0;
}
void FightBoss(Originator* on)
{
	on->GetState()->SetHealth(0);
	on->GetState()->SetAttack(0);
	on->GetState()->SetDefense(0);
	cout << "对抗BOSS"<<endl;
}


硬件手册——PT100精密测温电路 PT100精密测温电路 一、需求分析 根据题目要求为:测温范围为0-100℃、测温精度要求为±1℃。由于铂电阻具有精度高、性能可靠、稳定性好的特点,且铂电阻的电阻相对变化率与温度的关系曲线线性度最好,故选择铂电阻作为敏感元件。而在国标中,铂电阻有几种不同的标准,如PT100、PT1000。分别对应着0摄氏度下铂电阻的阻值为100R和1000R,由于需要考虑铂电阻的自发热问题,所以尽量选择阻值小的铂电阻,故选择PT100为最终型号。 二、电路设计 2.1 热电阻接法 热电阻测温电路有多种接法,其中三线制会导致 阅读详情

相关推荐

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

深入浅出Java设计模式之备忘录模式

深入浅出Java设计模式之备忘录模式http://dev.21tx.com 2005年08月15日 Blog ai92 一、引子   俗话说:世上难买后悔药。所以凡事讲究个“三思而后行”,但总常见有人做“痛心疾首”状:当初我要是……。如果真的有《大话西游》中能时光倒流的“月光宝盒”,那这世上也许会少一些伤感与后悔——当然这只能是痴人说梦了。  但是在我们手指下的程序世界里,却有的后悔药买。今天我们

liangevan的专栏 929

ESP32拓展板DIY全攻略:从零打造你的传感器控制中心(附PCB设计文件)

本文详细介绍了如何从零开始DIY ESP32拓展板,打造多功能传感器控制中心。内容涵盖项目规划、硬件设计、PCB布局、制作测试全流程,并提供进阶优化建议和实战案例。特别适合嵌入式硬件爱好者学习ESP32拓展板开发,实现各类传感器的高效集成与控制。

blockchain9miner的博客 1077

Java设计模式笔记之备忘录模式

1.前言 备忘录模式是一种行为模式,备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。 2.定义 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 3.UML图 Originator:负责创

ITMonkeyKing的博客 334

DDR内存Prefetch机制详解:从DDR1到DDR4的技术演进与性能提升

本文深入解析DDR内存Prefetch机制从DDR1到DDR4的技术演进与性能提升。通过分析Prefetch技术的实现原理与Burst传输的协同机制,揭示DDR1的2n Prefetch、DDR2的4n Prefetch、DDR3的8n Prefetch以及DDR4的Bank Group架构创新如何显著提升内存带宽与系统性能。

weixin_30369041的博客 537

UE5垃圾回收优化实战:定位GC卡顿与内存泄漏

垃圾回收(GC)是Unreal Engine 5中保障UObject内存安全的核心机制,其基于引用图的标记-清除原理决定了性能高度依赖引用结构合理性。当GC频繁触发或单次耗时突增,往往映射出蓝图强引用冗余、C++根对象管理失控或资源生命周期设计缺陷等底层问题。技术价值在于降低主线程阻塞、稳定60帧体验、抑制内存异常增长;典型应用场景包括关卡切换卡顿、UI打开后持续GC、打包后内存不释放等。本文聚焦UE5特有的Full GC模式、UObject生命周期约束及GC触发时机不可见性,提供从蓝图变量规范、TSoft

weixin_31995251的博客 362

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

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

TechNomad的博客 954

ECU-TEST 快速入门

ECU-TEST 是由位于德国德累斯顿的TraceTronic公司开发的一款用于嵌入式系统测试验证软件工具。自从2003年首次发布ECU-TEST ,该软件成为了汽车ECU开发的标准工具 ,同时也逐步成为了重型机械和工业自动化开发的标准工具 。该软件是起源自于一个控制单元的系统化测试的项目研究,从而为从德累斯顿工业大学脱离出来的TraceTronic公司奠定了基础。ECU-TEST旨在完成测试案例的规范化、评估、求解和归档。得益于该软件包含大量的自动化测试方法使得测试案例的所有必要功能如创建、求解和评估

wangying202的博客 1万+

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

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

jxusthusiwen的专栏 1130

逆向工程师必备:用MDL绕过游戏保护读取内存数据的完整流程(附POC代码)

本文深入探讨了内核级内存访问技术,重点介绍了如何利用MDL(Memory Descriptor List)机制稳定、隐蔽地绕过游戏反作弊系统读取进程内存。通过对比MmCopyVirtualMemory等方法的优劣,提供了完整的MDL映射实战代码与反检测策略,为逆向工程师在内核态进行安全内存操作提供了专业指导。

weixin_29227425的博客 623

【LCMM实战指南】从增长混合模型到潜在类别轨迹分析的纵向数据建模

本文深入解析了LCMM(潜在类别混合模型)在纵向数据建模中的应用,对比了LCGA与GMM的核心差异与选择策略。通过R语言lcmm包的实战演练,详细展示了从数据模拟、模型拟合、类别数选择到结果解读的全流程,为识别数据中不同的发展轨迹亚型提供了系统指南。

weixin_29070861的博客 379

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

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

星Yeah 的博客 1642

控制算法研发工程师(博士)职位深度解析与面试指南

摘要:广东万和新电气股份有限公司招聘控制算法研发工程师(博士),工作地点佛山顺德。职位要求2026届博士学历,电子信息工程或控制科学与工程专业。主要职责包括:1)燃气热水、热泵等系统的电控软件设计与优化;2)开发PID、模糊控制、ADRC、MPC等智能算法,应用于恒温控制、变频调节等场景。重点考察算法研发能力、系统稳定性优化及嵌入式实现经验。该职位提供三年资深工程师培养计划,需具备扎实的控制理论基础和工程实践能力,能够处理非线性系统、多工况自适应等复杂控制问题。

郑伟强dev的专栏 139

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

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

码鹿的记录 715

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

ShuSheng007的程序人生 2130

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

小威的博客 2万+

IMSL CNL 7.0.0 (x86-64)Crack

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

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

Java设计模式、备忘录模式、Memento Pattern

scorpio的博客 373

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

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

Z 416

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

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

wesigj的博客 2109

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

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

d3y1`5 81_09 1018

每天一个设计模式之备忘录模式(Memento Pattern)

顾名思义,备忘录就是保存一个状态,到需要的时候可以恢复到某一时刻的状态。

Dive Deep into The Knowledge 420

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

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

闲鱼的博客 549

C++设计模式——备忘录模式(memento pattern)

博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可以阅读和提出建议。 # 一、原理讲解 别名Token。 ## 1.1意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

净无邪博客 1482

设计模式-10 - Memento Design Pattern

备忘录模式是一种设计模式,它允许在不破坏封装性的情况下捕获和恢复对象的内部状态。其结构:Originator:创建和管理备忘录的对象。Memento:存储 Originator 状态的备忘录对象。Memento 对象是不可变的。Caretaker:存储 Memento 对象,而不了解其实际内容。示例:一个文本编辑器可以使用备忘录模式来存储文档的状态,以便用户可以撤消和重做编辑操作。

jxusthusiwen的专栏 684

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

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

遇见伯灵说的博客 1096

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

备忘录模式 定义 Without violating encapsulation, capture and externalize an object’s internal state so that the object can be restored to this state later. 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到...

kaven 1414
上一篇: [设计模式]观察者模式(Observer)
下一篇: [设计模式]组合模式(Compostie)
sicofield
博客等级 码龄18年 169粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值