本系列所有文章来自李建忠老师的设计模式笔记,系列如下:
设计模式(一)面向对象设计原则
23种设计模式(二)组件协作之模板方法
23种设计模式(三)组件协作之策略模式
23种设计模式(四)组件协作之观察者模式
23种设计模式(五)单一职责之装饰模式
23种设计模式(六)单一职责之桥模式
23种设计模式(七)对象创建之工厂方法
23种设计模式(八)对象创建之抽象工厂
23种设计模式(九)对象创建之原型模式
23种设计模式(十)对象创建之构建器
23种设计模式(十一)对象性能之单件模式
23种设计模式(十二)对象性能之享元模式
23种设计模式(十三)接口隔离之门面模式
23种设计模式(十四)接口隔离之代理模式
23种设计模式(十五)接口隔离之适配器
23种设计模式(十六)接口隔离之中介者
23种设计模式(十七)状态变化之状态模式
23种设计模式(十八)状态变化之备忘录
23种设计模式(十九)数据结构之组合模式
23种设计模式(二十)数据结构之迭代器
23种设计模式(二十一)数据结构之职责链
23种设计模式(二十二)行为变化之命令模式
23种设计模式(二十三)行为变化之访问器
23种设计模式(二十四)领域规则之解析器

文章目录

  • 动机
  • 模式定义
  • 要点总结

动机

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

模式定义

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

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 createMomento() {Memento m(state);return m;}void setMomento(const Memento & m) {state = m.getState();}
};int main()
{Originator orginator;//捕获对象状态,存储到备忘录Memento mem = orginator.createMomento();//... 改变orginator状态//从备忘录中恢复orginator.setMomento(memento);
}

要点总结

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

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

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

23种设计模式(十八)状态变化之备忘录相关推荐

  1. 23种设计模式(15):备忘录模式

    定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时 ...

  2. 23种设计模式(十四)模板方法模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  3. 23种设计模式(二十二)状态模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  4. 110.【十万字带你深入学习23种设计模式】

    Java 23种设计模式 (一).设计模式相关内容介绍 1.软件设计模式概述 (1).软件设计模式的产生背景 (2).软件设计模式的概念 (3).学习设计模式的重要性 (4).设计模式分类 2.UML ...

  5. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  6. JAVA设计模式总结之23种设计模式(重点!!!)

    JAVA设计模式总结之23种设计模式: 一.什么是设计模式 设计模式遵循的原则有6个: 二.设计模式的三个分类 三.各分类中模式的关键点 四.概说23种设计模式 1.单例模式(Singleton) 2 ...

  7. (原创)23种设计模式一网打尽,看这篇就够了!

    设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.建造者模式.单例模式.原型模式. 结构型模式,共七种:适配器模式.代理模式.装饰器模式.桥接模式.组合模式 ...

  8. Java进阶 23种设计模式 详解+应用+实例代码

    文章目录 前言 设计模式六大原则 1.单一原则 (1) 概念 (2) 优点 2.开闭原则 (1) 概念 3.里氏替换原则 (1) 概念 4.依赖倒置原则 (1) 概念 (2) 作用 5.接口隔离原则 ...

  9. 23种设计模式【全】 包含:模式定义 使用场景 实现步骤 优缺点 模式区别 UML类图 示例代码 注意项等

    23种设计模式(全) ***项目地址***:[GitHub](https://github.com/yjhroot/design-pattern) 声明 模式分类(3大类) 创建型模式(共5种) 结构 ...

  10. 从追MM谈23种设计模式

    从追MM谈Java的23种设计模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说&quo ...

最新文章

  1. PowerShell2.0之桌面计算机维护(九)磁盘管理
  2. 世卫组织总干事谭德塞:没有国家可以假装大流行已结束
  3. 物联网中的 ARM 漏洞利用
  4. hutool中的threadutil_Hutool - 好用的Java工具类库
  5. Java并发—锁的四种状态
  6. promise 中的异常捕获_promise 中的错误处理
  7. 【2018.06.21学习笔记】【linux高级知识 14.1-14.3】
  8. GPS时钟模块授时仪 与 同步时钟,1PPS
  9. mac下复制粘贴需要多次的问题
  10. 项目质量管理可能存在的问题及应对策略
  11. 企业网络安全建设必须要知道的终端产品
  12. 思科实验4.网络层:路由器IP地址配置
  13. 定制石墨烯水溶液-齐岳生物
  14. 人脸识别:Contrastive loss和梯度推到
  15. drawio界面自定义配置
  16. NHibernate in Action(第一章1.2)
  17. 以太坊私有链POA模式
  18. WinCC PRO V16项目下载的具体方法
  19. 摩托罗拉Edge Plus评论:被竞争对手掩盖的伟大手机
  20. 微信小程序自定义canvas手写签名组件

热门文章

  1. Solidworks踩坑随笔
  2. web安全day22:linux系统最基本知识最常用操作和命令
  3. 计算机网络物理层之物理层的基本概念
  4. Security+ 学习笔记52 风险管理
  5. 记一次easywechat企业付款问题
  6. VC++、MFC Sqlite3数据库的使用
  7. 个人工作总结(第一阶段)
  8. js原生设计模式——8单例模式之简约版属性样式方法库
  9. 前端常用功能记录(一)
  10. 大并发服务器不得不说的技术--TCP_CORK