我已经成功地在 Java 上编写了一个纸牌游戏,现在我被要求在我的设计之上实现一个撤消/重做。
我的计划是存储用户执行的移动列表或堆栈,如果用户想要撤消,我会 1. 检查用户是否可以撤消(即列表或堆栈中有移动),然后 2. 反向我存储的最后两个移动(即“从”移动我将卡片移出的位置和“到”移动,我将卡片移动到的位置)。
对于重做,我只会重做移动,这取决于用户执行撤消操作的距离(例如,如果他们按下撤消两次,我至少会在我的列表或堆栈下方(列表大小 - 4) )。
我认为它们将在这样的接口中实现:
public interface UndoRedo {
void undo();
void redo();
}
Run Code Online (Sandbox Code Playgroud)
我是在实现 Memento 或 Command 设计模式,还是两者都没有?在此游戏的撤消/重做上下文中,我无法理解这两种设计模式的外观。我也是 Java OOP 和一般设计模式的初学者。