Undo/Redo几种实现方式介绍(五)——两个需要讨论的问题
2017-11-12 19:57
357 查看
上述几种实现Undo/Redo的方式都不能避免的涉及到下面问题。 1)是否需要无限undo/redo 所谓无限undo/redo是指从用户开始编辑到结束编辑过程中的所有操作都被记录在案,用户可以通过undo/redo操作将窗口状态恢复到任意时刻。 前面给出的例子都不是无限的undo/redo,当用户进行下一步的编辑后,程序会将redo缓冲区清空。目前的主流软件都是类似的操作。在word还有一些其他软件中,当键入新的内容之后,redo操作只会重复你现在的操作。原先的都被清空掉了。 之所以无限undo/redo应用比较少,我认为原因有一下几点:a)太耗费内存,加入有个10M的图片,每次对这个图片操作之后都会在undo/redo记录中留下一份记录,那么内存会被耗费的很多,但是如果在每次记录用户操作的时候都把redo缓冲区清空的话,就会节省很多内存;b)很少有用户会一直进行undo/redo操作,如果说undo是用户之前操作错误,才会进行undo操作把错误操作撤销,那么redo就意味着用户认为他自己撤销操作的操作是错误的,这种错误发生的几率比较小,所以不需要一直保存redo内容。 2)是否记录所有的改动 在信息编辑窗口中,用户的操作虽然改变了某些属性值,但是这些属性值的变化并不会在信息编辑窗口中直接体现出来,也就是说用户改变了某些属性值,但是信息编辑窗口中没有什么变化。这时就需要考虑是否对这些属性的变化进行undo操作记录。 如果不记录,则会给用户误导,用户会认为在点击undo的时候会将这些属性值恢复为原始值,但是实际上并没有恢复。如果记录这种操作,当用户点击undo按钮的时候,信息编辑窗口界面并没有发生变化,这样会使用户产生疑惑:undo按钮到底有用没有,是不是时灵时不灵。 一种折中的方法是将undo记录分为明操作和隐藏操作,如果用户的操作使信息编辑窗口发生变化,则此操作是明操作,反之为隐藏操作,当用户进行undo/redo操作的时候,程序会一直undo或者redo到下一个明操作,期间夹杂的隐藏操作都自动执行undo/redo操作。 关于undo/redo操作就是这些内容了,当然除了这几种方法肯定还有会其他方式实现类似操作,如果以后发现其它实现undo/redo的方法我会继续添加。
相关文章推荐
- Undo/Redo几种实现方式介绍(三)——保存操作方式
- Undo/Redo几种实现方式介绍(四)——command模式实现
- Undo/Redo几种实现方式介绍(二)——保存数据方式
- Undo/Redo几种实现方式介绍(—)——undo/redo介绍
- 生产者消费者模式的几种实现方式以及线程安全问题
- Android 定时器实现的几种方式和removeCallbacks失效问题详解
- 有关网站UI实现的几种方式的讨论
- Android之定时器实现的几种方式和removeCallbacks失效问题详解
- C# DataTableToExcel的几种实现方式及遇到的问题
- Android 定时器实现的几种方式和removeCallbacks失效问题详解
- 多线程的几种实现方式(简易版)--Callable接口介绍
- Android 定时器实现的几种方式和removeCallbacks失效问题详解
- C++实现线程同步的几种方式 线程同步是指同一进程中的多个线程互相协调工作从而达到一致性。之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多
- 问题2:你使用过几种方式在网上发布信息?都有什么?你认为还有那些工具需要学习的?每问必答,长短不限
- java实现生产者和消费者问题的几种方式
- 不同页面之间实现参数传递的几种方式讨论
- PHP实现加密的几种方式介绍
- Android 定时器实现的几种方式和removeCallbacks失效问题详解
- C++中两个数据交换的几种实现方式
- Android定时器实现的几种方式整理及removeCallbacks失效问题解决