2010-02-06 88 views
14

我在应用程序的设计过程中,我想使用command pattern来撤消/重做。我对命令模式进行了一些研究,但唯一没有得到的是:一个命令是否应该具有撤销和重做方法,或者我应该制作两个单独的命令:一个用于撤消,一个用于重做,然后调用主要命令本身?实现命令模式

回答

11

命令对象本身应该实现撤销/重做功能。

这些命令通常会从命令管理器维护的堆栈中弹出并弹出,以实现多级撤消。当执行命令时,它们被压入堆栈,当它们撤消时,它们将从堆栈弹出。

备忘录模式将与命令模式一起使用,它不是命令模式使用的替代品。它将用于维护撤销操作所需的状态。

+1

我想补充说一个更好的解决方案不仅仅是一个简单的堆栈。相反,您需要一个列表和对当前项目的引用。撤销将参考移回,并*重做*将其前移。使用堆栈不会让您重做。 – munificent 2010-02-08 23:34:53

+1

我已经使用了2个堆栈,撤消和重做堆栈。如果撤销某个操作,它将从撤消堆栈中弹出并将其推入重做堆栈。添加新动作是将新动作推入撤消堆栈并清除重做堆栈。 – Wout 2012-10-18 14:02:13

2

您可能还想考虑一下这个备忘录模式,我们使用它,它的工作辉煌的撤消。

+0

当我只想要撤消命令模式时,实现这个命令模式的时候,这个备忘录模式会不会耗时? – slayerIQ 2010-02-06 23:29:44

+0

@slayerIQ备忘录模式将与命令模式一起使用,它不是命令模式使用的替代品。 – David 2010-02-07 00:06:21

+0

所以这个备忘录会保存撤销和重做堆栈,并且堆栈将包含命令我是对的吗? – slayerIQ 2010-02-07 00:36:57