2010-02-06 96 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