Undo-Redo重复命令

时间:2011-01-24 21:48:25

标签: undo undo-redo command-pattern

所以,我知道undo / redo通常是通过命令模式实现的。 但是,当一个命令打算重复x次时,撤消x次会对用户造成麻烦。

例如,我有一个“int num”,当我在键盘上按“+”时,程序将执行“++ num”。如果用户通过按“+”将num从0增加到50,则用户想要撤消,如何允许用户撤消一次,num将返回0。

如何实现撤消以便它可以处理一系列重复的命令?

提前致谢!

1 个答案:

答案 0 :(得分:0)

受监视的撤消框架(http://muf.codeplex.com)通过使用批处理操作的概念来实现此目的。您可以将一组操作标记为属于某个组,以便撤消系统将其作为工作单元撤消/重做。

此外,库允许您通过仅存储给定字段的第一个/最后一个值来优化情况。这样,撤消/重做逻辑不必应用所有50个操作。它可以通过将值设置回撤消批处理之前的内容来简单地撤消。

警告:MUF库不使用传统的命令模式。它使用更多的memento模式,跟踪在底层域模型中发生的变化。

如果您需要具有真正的命令模式,那么您可以向撤消实现添加逻辑,以检查撤消堆栈上的条目。然后,例如,如果用户在“+”操作上点击撤消,则堆栈将开始撤消,并且只要它继续在堆栈上找到“+”操作就保持撤消。我已经在我无法批量处理事件的情况下使用了这种方法,但希望撤消堆栈能够一次自动撤消多个操作。