我成功地使用Java编写了一个纸牌游戏,现在被要求在我的设计上实现撤销/重做功能。
我的计划是存储用户执行的移动列表或堆栈,如果用户想要撤销,则会 1. 检查用户是否可以撤销(即列表或堆栈中有移动),然后 2. 反转我存储的最后两个移动(即“从”移动和“到”移动)。
对于重做,我将根据用户执行撤销操作的深度重新执行移动(例如,如果他们按两次撤销,那么我至少会在我的列表或堆栈中向下移动(列表大小-4))。
我认为它们将在接口中实现,如下所示:
我的计划是存储用户执行的移动列表或堆栈,如果用户想要撤销,则会 1. 检查用户是否可以撤销(即列表或堆栈中有移动),然后 2. 反转我存储的最后两个移动(即“从”移动和“到”移动)。
对于重做,我将根据用户执行撤销操作的深度重新执行移动(例如,如果他们按两次撤销,那么我至少会在我的列表或堆栈中向下移动(列表大小-4))。
我认为它们将在接口中实现,如下所示:
public interface UndoRedo {
void undo();
void redo();
}
我是在实现备忘录模式,还是命令模式,或两者都不是?我对这两种设计模式在此游戏的撤消/重做上的表现形式感到困惑。我也是Java面向对象编程和设计模式的初学者。