Design patterns 实现命令模式

Design patterns 实现命令模式,design-patterns,undo-redo,command-pattern,Design Patterns,Undo Redo,Command Pattern,我正在设计一个应用程序,我想使用用于撤销/重做目的。我对命令模式做了一些研究,但我唯一没有得到的是:一个命令应该具有undo和redo方法,还是应该生成两个单独的命令,一个用于undo,一个用于redo,并从主命令本身调用它们?命令对象本身应该实现undo/redo功能 命令通常从命令管理器维护的堆栈中推送和弹出,以实现多级撤消。当命令被执行时,它们被推送到堆栈上,当它们被撤消时,它们从堆栈中弹出 memento模式将与命令模式一起使用,它不是命令模式的替代品。它将用于维护撤销操作所需的状态。您

我正在设计一个应用程序,我想使用用于撤销/重做目的。我对命令模式做了一些研究,但我唯一没有得到的是:一个命令应该具有undo和redo方法,还是应该生成两个单独的命令,一个用于undo,一个用于redo,并从主命令本身调用它们?

命令对象本身应该实现undo/redo功能

命令通常从命令管理器维护的堆栈中推送和弹出,以实现多级撤消。当命令被执行时,它们被推送到堆栈上,当它们被撤消时,它们从堆栈中弹出


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

您可能还需要考虑为此的纪念品模式,我们使用它,它对撤销非常有效。

当我只希望它用于撤销时,memento模式实现的时间会比命令模式少吗?@slayerIQ memento模式将与命令模式结合使用,它不是命令模式的替代品。因此,memento将保留撤消和重做堆栈,这些堆栈将包含命令,对吗?@slayerIQ memento将保留对象以前的状态,以便可以撤消。如果对象较大,memento模式可能会占用大量内存。使用命令模式基本上意味着只存储对象先前状态和当前状态之间的差异,其中memento存储整个状态。相反,您需要一个列表和对当前项的引用。撤消将使引用向后移动,而重做将使其向前移动。使用堆栈不允许重做。我使用了两个堆栈,撤消和重做堆栈。如果撤消操作,它将从撤消堆栈弹出并推送到重做堆栈上。添加一个新操作就是将一个新操作推送到撤消堆栈上并清除重做堆栈。