用于实施UNDO和REDO选项的数据结构

Syn*_*ter 45 design-patterns undo-redo data-structures

我想实现UNDO和REDO选项(正如我们在MS word等中看到的那样).你能为我建议一个数据结构,我该如何实现呢?

Jas*_*yon 102

它不是数据结构,而是设计模式.你正在寻找命令模式.

标准是将Command对象保留在堆栈中以支持多级撤消.为了支持重做,第二个堆栈会保留你已经完成的所有命令.因此,当您弹出撤消堆栈以撤消命令时,您可以将弹出的相同命令推送到重做堆栈.重做命令时,您可以反向执行相同的操作.弹出重做堆栈并将弹出的命令推回到撤消堆栈中.

  • 如果你推动另一个命令,总是清除重做堆栈也很重要. (31认同)
  • 数据结构是Stack与"Command"对象的实例. (11认同)
  • 我觉得命令模式不一定是你如何实现撤销,它只是一个选项,也不是OP问题的答案.undo/redo堆栈就是答案.(虽然我猜他确实提到了MSWord.) (4认同)

Han*_*Gay 36

实际上,这个功能的标准模式(Gang of Four,甚至)是Memento.

此外,虽然大多数程序使用Undo/Redo堆栈,但某些文本编辑器的功能优先于Undo/Redo 树,因此如果它们撤消一些命令,尝试新命令并改变主意,它们就不会丢失整个历史记录.

  • 你是对的.如果您添加有关它如何与命令模式交互的更多信息,这将是一个很好的答案. (3认同)