撤销和重做(Undo和Redo)(2)
来源:互联网 发布:dnf端口辅助网盘 编辑:程序博客网 时间:2024/05/02 00:24
撤销和重做(Undo和Redo)的C++完美实现(2) 通过前面的讨论,我们所希望的是具备有“仿函数保存反操作法”的时间和空间优势,但是又不希望有“仿函数保存反操作法”的书写反操作的繁琐过程,另外还要保证代码的组织非常简洁,当然这是为了方便维护了:)
在前面的章节中讨论了目前常见的实现撤销和重做的方案,其中的仿函数保存反操作
的方案的空间和时间优势非常吸引人,但是需要为每一个操作实现一个反操作,这个过程
非常的繁琐,而且容易出错;更何况并不是每一个操作都有反操作存在的,必须要将当前
的信息保存下来,在撤销和重做的时候使用。
从前面的所有方案中我们可以总结出实现撤销和重做所必须遵守的一些规范如下:
(1)为了实现撤销操作必须在对对象修改之前保存原始信息备份
(2)为了实现重做操作必须在对对象修改的时候保存修改信息备份
有了上面的两条就可以保证任何操作(到目前为止我还没有发现不能用这种方式实现
撤销和重做的操作)都可以通过这两条规则实现撤销和重做的能力。好了,到目前为止,
有了实现撤销和重做方案的通用规则,并且这种规则的空间和时间效率都非常好,我们该
讨论一下三个基本操作和一个复合操作了。至于为什么只有三种基本操作和一个复合操作
,这就是我在编写这个撤销和重做框架的过程中慢慢积累起来的,至于严格的证明,恐怕
不是我现在可以处理的了的。
这个三个基本操作是:
(a)创建操作
(b)修改操作
(c)删除操作
一个复合操做是:
(d)复合操作
一共是四个操作,其中复合操作可以是三个基本操作的组合,也可以是三个基本操作
和复合操作的任意组合,也就是说:复合操作里面还有子复合操作,这种嵌套可以达到任
意的层次。这里面的组合就是千变万化的了!
好了,说了这么多,是该看看具体的代码是如何实现的了。值得说明的是:为了代码
的正确性和可读性,在实现的过程中尽量避免非常复杂的C++指针操作问题,当然对于避
免不了的指针问题,也要尽可能的使其简单;取而代之的是尽量使用STL中的容器和算法
来实现需要的功能。
首先看看三个基本操作的原始实现:
////////////////////////////////////////////////////////////////////////////////
//三个基本操作的初始代码实现
#i nclude
#i nclude
在前面的章节中讨论了目前常见的实现撤销和重做的方案,其中的仿函数保存反操作
的方案的空间和时间优势非常吸引人,但是需要为每一个操作实现一个反操作,这个过程
非常的繁琐,而且容易出错;更何况并不是每一个操作都有反操作存在的,必须要将当前
的信息保存下来,在撤销和重做的时候使用。
从前面的所有方案中我们可以总结出实现撤销和重做所必须遵守的一些规范如下:
(1)为了实现撤销操作必须在对对象修改之前保存原始信息备份
(2)为了实现重做操作必须在对对象修改的时候保存修改信息备份
有了上面的两条就可以保证任何操作(到目前为止我还没有发现不能用这种方式实现
撤销和重做的操作)都可以通过这两条规则实现撤销和重做的能力。好了,到目前为止,
有了实现撤销和重做方案的通用规则,并且这种规则的空间和时间效率都非常好,我们该
讨论一下三个基本操作和一个复合操作了。至于为什么只有三种基本操作和一个复合操作
,这就是我在编写这个撤销和重做框架的过程中慢慢积累起来的,至于严格的证明,恐怕
不是我现在可以处理的了的。
这个三个基本操作是:
(a)创建操作
(b)修改操作
(c)删除操作
一个复合操做是:
(d)复合操作
一共是四个操作,其中复合操作可以是三个基本操作的组合,也可以是三个基本操作
和复合操作的任意组合,也就是说:复合操作里面还有子复合操作,这种嵌套可以达到任
意的层次。这里面的组合就是千变万化的了!
好了,说了这么多,是该看看具体的代码是如何实现的了。值得说明的是:为了代码
的正确性和可读性,在实现的过程中尽量避免非常复杂的C++指针操作问题,当然对于避
免不了的指针问题,也要尽可能的使其简单;取而代之的是尽量使用STL中的容器和算法
来实现需要的功能。
首先看看三个基本操作的原始实现:
////////////////////////////////////////////////////////////////////////////////
//三个基本操作的初始代码实现
#i nclude
#i nclude
- 撤销和重做(Undo和Redo)(2)
- 撤销重做(Undo/Redo)
- 重做(redo)和撤销(undo)的完整实现
- 撤销(undo)和重做(redo)的C++完美实现
- Command模式实现撤销重做(Undo/Redo)
- Command模式实现撤销重做(Undo/Redo)
- qt的redo和undo undo撤销(后退),redo取消撤销(前进)
- iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
- iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
- Undo和Redo机制
- redo和undo
- oracle redo 和undo
- RCP UNDO和Redo
- redo 和 undo 之一
- ORACLE UNDO和REDO
- redo和undo
- 关于Undo和Redo
- Redo和Undo
- 修改 ESX Server IP 地址
- auto、register、static、extern等存储类修饰符的区别
- 口头禅会暴露你性格吗?
- PDMReader的资料整理和个人说明
- linux 查看硬件命令
- 撤销和重做(Undo和Redo)(2)
- Scala By Example: 表达式与函数 习题
- MSDN
- 多条件查询的sql语句字符串拼接
- C#用递归生成xml文件代码
- Android三种常用布局文件
- 一些整理的链接地址(不断更新)
- 网页快照 java 实现
- *nix 网络编程 基础精华总结