Java 仅允许撤消中的反向操作
我正在尝试实现简单的纸牌游戏 现在让我们假设我们有一个名为SourceCardDeck的类,它表示卡片的源卡片组。这个类可以弹出一张卡,但不能按需要将卡推回,因为用户不能在源卡组上存储卡 但是现在我想实现一个撤销操作 如果没有任何方法将卡推回,我如何才能做到这一点?我听说过命令模式,但它只适用于可用的反向方法。还有,这张卡和它出现的能力呢?卡应该有办法拒绝吗?用户通常无法再次关闭卡。但在撤销中,它是必要的Java 仅允许撤消中的反向操作,java,design-patterns,methods,undo,Java,Design Patterns,Methods,Undo,我正在尝试实现简单的纸牌游戏 现在让我们假设我们有一个名为SourceCardDeck的类,它表示卡片的源卡片组。这个类可以弹出一张卡,但不能按需要将卡推回,因为用户不能在源卡组上存储卡 但是现在我想实现一个撤销操作 如果没有任何方法将卡推回,我如何才能做到这一点?我听说过命令模式,但它只适用于可用的反向方法。还有,这张卡和它出现的能力呢?卡应该有办法拒绝吗?用户通常无法再次关闭卡。但在撤销中,它是必要的 如何使这一方法正确而简洁?这是一个相当宽泛的问题,因此是一个宽泛的答案,旨在让您继续:基本
如何使这一方法正确而简洁?这是一个相当宽泛的问题,因此是一个宽泛的答案,旨在让您继续:基本上您是在问:如何以与对象的公共API冲突的方式恢复对象的状态 这里有两个选项: 你在想你的API。例如,您可以让那个特殊的卡堆栈实现某个接口。该接口仅公开从堆栈中取出卡的方法,从而防止意外推回。但是实现该接口的类也可能实现另一个接口;它允许推回。因此,大多数代码都使用take only接口视图;只有需要推回的部分才能在另一个接口上工作。 当您无法更改单个对象的状态时,您可以简单地保留所有对象的状态。对于每个状态的更改。撤消意味着:将所有对象取消持久化到先前的内容。换句话说:你可以在状态改变时序列化游戏中的所有对象;和撤消意味着:反序列化所有对象。 两种方法各有利弊;由于这是您的项目,我将讨论这些方面并推动决策作为练习留给读者 最后:一张卡片不应该知道被拒绝或被记录。一张卡片就是一张卡片。试想一下你试图对现实世界的领域进行建模的方式。纸牌游戏中的一张牌一点也不会变。它总是只是一张纸板,上面印着什么东西。它没有状态。唯一具有状态的东西:包含卡对象的各种堆。您可以查看