06.C语言和设计模式(备忘录模式)
2014-06-25 09:32
302 查看
原文地址:http://blog.csdn.net/feixiaoxing/article/details/7179471
备忘录模式的起源来自于撤销的基本操作。有过word软件操作经验的朋友,应该基本上都使用过撤销的功能。举个例子,假设你不小心删除了好几个段落的文字,这时候你应该怎么办呢?其实要做的很简单,单击一些【撤销】就可以全部搞定了。撤销按钮给我们提供了一次反悔的机会。
既然是撤销,那么我们在进行某种动作的时候,就应该创建一个相应的撤销操作?这个撤销操作的相关定义可以是这样的。
[cpp] view
plaincopy
typedef struct _Action
{
int type;
struct _Action* next;
void* pData;
void (*process)(void* pData);
}Action;
数据结构中定义了两个部分:撤销的数据、恢复的操作。那么这个撤销函数应该有一个创建的函数,还有一个恢复的函数。所以,作为撤销动作的管理者应该包括,
[cpp] view
plaincopy
typedef struct _Organizer
{
int number;
Action* pActionHead;
Action* (*create)();
void (*restore)(struct _Organizer* pOrganizer);
}Organizer;
既然数据在创建和修改的过程中都会有相应的恢复操作,那么要是真正恢复原来的数据也就变得非常简单了。
[cpp] view
plaincopy
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;
}
备忘录模式的起源来自于撤销的基本操作。有过word软件操作经验的朋友,应该基本上都使用过撤销的功能。举个例子,假设你不小心删除了好几个段落的文字,这时候你应该怎么办呢?其实要做的很简单,单击一些【撤销】就可以全部搞定了。撤销按钮给我们提供了一次反悔的机会。
既然是撤销,那么我们在进行某种动作的时候,就应该创建一个相应的撤销操作?这个撤销操作的相关定义可以是这样的。
[cpp] view
plaincopy
typedef struct _Action
{
int type;
struct _Action* next;
void* pData;
void (*process)(void* pData);
}Action;
数据结构中定义了两个部分:撤销的数据、恢复的操作。那么这个撤销函数应该有一个创建的函数,还有一个恢复的函数。所以,作为撤销动作的管理者应该包括,
[cpp] view
plaincopy
typedef struct _Organizer
{
int number;
Action* pActionHead;
Action* (*create)();
void (*restore)(struct _Organizer* pOrganizer);
}Organizer;
既然数据在创建和修改的过程中都会有相应的恢复操作,那么要是真正恢复原来的数据也就变得非常简单了。
[cpp] view
plaincopy
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;
}
相关文章推荐
- 干净搞定delphi多语言-兼论设计模式
- 设计模式c#语言描述——装饰(Decorator)模式
- 设计模式c#语言描述——合成(Composite)模式
- 设计模式——备忘录模式(Memento)
- 设计模式笔记 20. Memento 备忘录模式(行为型模式)
- 设计模式(15)-备忘录模式(Memento)
- 设计模式之七——备忘录模式
- 设计模式是软件的灵魂, 开发语言是多种实现的一种
- [设计模式]Memento pattern(备忘录模式)在Paint.net中的应用
- C 语言设计模式(二) 单链表操作
- 简易模式脚本语言(PS)设计
- 面向对象语言的Coercion Rules(强制原则)-杨大川老师设计模式课程总结
- 委托,语言级别的设计模式
- 非关语言: 设计模式[zt]
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- 委托,语言级别的设计模式
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
- C 语言设计模式(一) 动态数组
- Java模式设计之多态模式与多语言支持