【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

备忘录模式的起源来自于撤销的基本操作。有过word软件操作经验的朋友,应该基本上都使用过撤销的功能。举个例子,假设你不小心删除了好几个段落的文字,这时候你应该怎么办呢?其实要做的很简单,单击一些【撤销】就可以全部搞定了。撤销按钮给我们提供了一次反悔的机会。

既然是撤销,那么我们在进行某种动作的时候,就应该创建一个相应的撤销操作?这个撤销操作的相关定义可以是这样的。

typedef struct _Action
{int type;struct _Action* next;void* pData;void (*process)(void* pData);}Action;

数据结构中定义了两个部分:撤销的数据、恢复的操作。那么这个撤销函数应该有一个创建的函数,还有一个恢复的函数。所以,作为撤销动作的管理者应该包括,

typedef struct _Organizer
{int number;Action* pActionHead;Action* (*create)();void (*restore)(struct _Organizer* pOrganizer);
}Organizer;

既然数据在创建和修改的过程中都会有相应的恢复操作,那么要是真正恢复原来的数据也就变得非常简单了。

void restore(struct _Organizer* pOrganizer)
{Action* pHead;assert(NULL != pOrganizer);pHead = pOrganizer->pActionHead;pHead->process(pHead->pData);pOrganizer->pActionHead = pHead->next;pOrganizer->number --;free(pHead);return;
}

C语言和设计模式(备忘录模式)相关推荐

  1. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  2. 设计模式-备忘录模式(Memento)-Java

    设计模式-备忘录模式(Memento)-Java 目录 文章目录 1.前言 2.示例案例-可悔棋的中国象棋 3.备忘录模式概述 3.1.备忘录模式定义 3.2.备忘录模式结构 3.3.备忘录模式结构图 ...

  3. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  4. Java设计模式——备忘录模式

    Java设计模式--备忘录模式 需求 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状 ...

  5. C语言实现设计模式—模板模式

    文章目录 C语言实现设计模式-模板模式 模板模式介绍 UML用例说明 实际场景使用 框架结构[共用框架]-通用的串口协议分析函数 不同实现-数据类型区别 C语言实现设计模式-模板模式 模板模式介绍 在 ...

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

    博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可 ...

  7. java设计模式---备忘录模式

    一.引子 俗话说:世上难买后悔药.所以凡事讲究个"三思而后行",但总常见有人做"痛心疾首"状:当初我要是--.如果真的有<大话西游>中能时光倒流的& ...

  8. 大话设计模式—备忘录模式

    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式.所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保 ...

  9. PHP设计模式——备忘录模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对 ...

  10. 一天一个设计模式---备忘录模式

    介绍:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将对象恢复到原先保存的状态. 场景:我们在平时玩单机游戏的时候,比如红白机的Pokemon–宠物小精灵, ...

最新文章

  1. 手把手教你在Linux上搭建BitTorrent服务器
  2. Js正则表达式数字或者带小数点的数字
  3. 20100311 学习记录
  4. 信息学奥赛一本通 2059:【例3.11】买笔
  5. 大约HR升级版的设计为组汇总
  6. Guice Aop 与 Hasor Aop 原理及其实现
  7. 趣味俄罗斯方块——C语言
  8. 红豆、绿豆、黑豆、花生、莲子、薏仁米放在一起吃,可以吗?
  9. mysql 查询若干小时之内的数据
  10. memset初始化值的效率秒杀for循环
  11. oracle 自增长这么使用,Eova Oracle 自增长的处理
  12. 经验分享:如何免费合并两个pdf文件
  13. python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
  14. Spring中的 @Lazy注解简析
  15. NLP之NER:商品标题属性识别探索与实践
  16. 跟我学RocketMQ之批量消息发送源码解析
  17. 咱们的课程里,有微信的这种菜单示例吗?---酷课堂iOS交流群问答整理(201810期)...
  18. minio Non-XML response from server
  19. 独角兽项目 1 - 替罪羊
  20. 网上调研方式----采用Google Adword关键字工具和百度指数工具

热门文章

  1. Oracle移除表空间的数据文件 ora-00604 ora-01426
  2. 吉哥系列故事——完美队形II(hdu4513+Manacher)
  3. 《数据分析实战 基于EXCEL和SPSS系列工具的实践》一3.2 用“逐步推进法”推测需要的数据...
  4. SharePoint的十大优势
  5. 什么是全兼容?DVD主流格式全面解析
  6. postgresql数据库导入导出
  7. swagger ui 值类型形参加文字注释
  8. MySQL索引(1)
  9. YJX_Driver_031_再谈SSDT_HOOK驱动保护原理
  10. SASS 的相关函数