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