C语言和设计模式(备忘录模式)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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语言和设计模式(备忘录模式)相关推荐
- Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)
Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...
- 设计模式-备忘录模式(Memento)-Java
设计模式-备忘录模式(Memento)-Java 目录 文章目录 1.前言 2.示例案例-可悔棋的中国象棋 3.备忘录模式概述 3.1.备忘录模式定义 3.2.备忘录模式结构 3.3.备忘录模式结构图 ...
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Java设计模式——备忘录模式
Java设计模式--备忘录模式 需求 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状 ...
- C语言实现设计模式—模板模式
文章目录 C语言实现设计模式-模板模式 模板模式介绍 UML用例说明 实际场景使用 框架结构[共用框架]-通用的串口协议分析函数 不同实现-数据类型区别 C语言实现设计模式-模板模式 模板模式介绍 在 ...
- C++设计模式——备忘录模式(memento pattern)
博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可 ...
- java设计模式---备忘录模式
一.引子 俗话说:世上难买后悔药.所以凡事讲究个"三思而后行",但总常见有人做"痛心疾首"状:当初我要是--.如果真的有<大话西游>中能时光倒流的& ...
- 大话设计模式—备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式.所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保 ...
- PHP设计模式——备忘录模式
声明:本系列博客参考资料<大话设计模式>,作者程杰. 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对 ...
- 一天一个设计模式---备忘录模式
介绍:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将对象恢复到原先保存的状态. 场景:我们在平时玩单机游戏的时候,比如红白机的Pokemon–宠物小精灵, ...
最新文章
- 手把手教你在Linux上搭建BitTorrent服务器
- Js正则表达式数字或者带小数点的数字
- 20100311 学习记录
- 信息学奥赛一本通 2059:【例3.11】买笔
- 大约HR升级版的设计为组汇总
- Guice Aop 与 Hasor Aop 原理及其实现
- 趣味俄罗斯方块——C语言
- 红豆、绿豆、黑豆、花生、莲子、薏仁米放在一起吃,可以吗?
- mysql 查询若干小时之内的数据
- memset初始化值的效率秒杀for循环
- oracle 自增长这么使用,Eova Oracle 自增长的处理
- 经验分享:如何免费合并两个pdf文件
- python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
- Spring中的 @Lazy注解简析
- NLP之NER:商品标题属性识别探索与实践
- 跟我学RocketMQ之批量消息发送源码解析
- 咱们的课程里,有微信的这种菜单示例吗?---酷课堂iOS交流群问答整理(201810期)...
- minio Non-XML response from server
- 独角兽项目 1 - 替罪羊
- 网上调研方式----采用Google Adword关键字工具和百度指数工具
热门文章
- Oracle移除表空间的数据文件 ora-00604 ora-01426
- 吉哥系列故事——完美队形II(hdu4513+Manacher)
- 《数据分析实战 基于EXCEL和SPSS系列工具的实践》一3.2 用“逐步推进法”推测需要的数据...
- SharePoint的十大优势
- 什么是全兼容?DVD主流格式全面解析
- postgresql数据库导入导出
- swagger ui 值类型形参加文字注释
- MySQL索引(1)
- YJX_Driver_031_再谈SSDT_HOOK驱动保护原理
- SASS 的相关函数