当前位置: 首页 > news >正文

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

动机(Motivation)

在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。

如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。

模式定义

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

示例


#include <string>
using namespace std;class Memento {string state;//...
public:Memento(const string& s) : state(s) {}string getState() const { return state; }void setState(const string& s) { state = s; }
};class Originator {string state;//...
public:Originator() {}Memento createMemento() {Memento m(state);return m;}void setMemento(const Memento& m) { state = m.getState(); }
};int main() {Originator originator;//捕获对象状态,存储到备忘录Memento m = originator.createMemento();//... 改变oroginator状态//从备忘录中恢复originator.setMemento(m);
}

要点总结

备忘录(Memento)存储原发器(Originator)对象内部状态,在需要时恢复原发器状态。

Memento模式的核心时信息隐藏,即Originator需要向外部隐藏信息,保持其封装性。但同时又需要将状态保存到外界(Memento)。

由于现在语言运行时(C#、Jave等)多具有相当的对象序列化支持,因此往往采用效率更高、又较容易正确实现的序列化方案来实现Memento模式。

http://www.lryc.cn/news/233651.html

相关文章:

  • 机器学习—基本术语
  • pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed模型训练
  • 基于PHP的纺织用品商城系统
  • Go使用命令行输出二维码
  • 最长连续序列[中等]
  • 设计模式-状态模式-笔记
  • Java中for、foreach、stream区别和性能比较
  • [CSS] 文本折行
  • 033-从零搭建微服务-日志插件(一)
  • 短期经济波动:均衡国民收入决定理论(三)
  • 电力感知边缘计算网关产品设计方案-网关软件架构
  • 最新AI创作系统ChatGPT系统运营源码/支持最新GPT-4-Turbo模型/支持DALL-E3文生图
  • Java使用Redis的几种客户端介绍
  • 程序员的护城河
  • 常见面试题-MySQL软删除以及索引结构
  • 信号的机制——信号处理函数的注册
  • JS-项目实战-鼠标悬浮变手势(鼠标放单价上生效)
  • redis运维(十一) python操作redis
  • 黑马程序员微服务 第五天课程 分布式搜索引擎2
  • 什么是UV贴图?
  • 从哪里下载 Oracle database 11g 软件
  • Ingress安全网关
  • Jmeter控制RPS
  • 【Nginx】转发配置nginx.conf
  • uniapp实现下载图片到本地
  • spring cloud-注册中心(Eureka)
  • 004 OpenCV akaze特征点检测匹配
  • openRPA开源项目源码编译
  • 飞书开发学习笔记(八)-开发飞书小程序Demo
  • Unity UI 完全解决方案