Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅允许撤消中的反向操作_Java_Design Patterns_Methods_Undo - Fatal编程技术网

Java 仅允许撤消中的反向操作

Java 仅允许撤消中的反向操作,java,design-patterns,methods,undo,Java,Design Patterns,Methods,Undo,我正在尝试实现简单的纸牌游戏 现在让我们假设我们有一个名为SourceCardDeck的类,它表示卡片的源卡片组。这个类可以弹出一张卡,但不能按需要将卡推回,因为用户不能在源卡组上存储卡 但是现在我想实现一个撤销操作 如果没有任何方法将卡推回,我如何才能做到这一点?我听说过命令模式,但它只适用于可用的反向方法。还有,这张卡和它出现的能力呢?卡应该有办法拒绝吗?用户通常无法再次关闭卡。但在撤销中,它是必要的 如何使这一方法正确而简洁?这是一个相当宽泛的问题,因此是一个宽泛的答案,旨在让您继续:基本

我正在尝试实现简单的纸牌游戏

现在让我们假设我们有一个名为SourceCardDeck的类,它表示卡片的源卡片组。这个类可以弹出一张卡,但不能按需要将卡推回,因为用户不能在源卡组上存储卡

但是现在我想实现一个撤销操作

如果没有任何方法将卡推回,我如何才能做到这一点?我听说过命令模式,但它只适用于可用的反向方法。还有,这张卡和它出现的能力呢?卡应该有办法拒绝吗?用户通常无法再次关闭卡。但在撤销中,它是必要的


如何使这一方法正确而简洁?

这是一个相当宽泛的问题,因此是一个宽泛的答案,旨在让您继续:基本上您是在问:如何以与对象的公共API冲突的方式恢复对象的状态

这里有两个选项:

你在想你的API。例如,您可以让那个特殊的卡堆栈实现某个接口。该接口仅公开从堆栈中取出卡的方法,从而防止意外推回。但是实现该接口的类也可能实现另一个接口;它允许推回。因此,大多数代码都使用take only接口视图;只有需要推回的部分才能在另一个接口上工作。 当您无法更改单个对象的状态时,您可以简单地保留所有对象的状态。对于每个状态的更改。撤消意味着:将所有对象取消持久化到先前的内容。换句话说:你可以在状态改变时序列化游戏中的所有对象;和撤消意味着:反序列化所有对象。 两种方法各有利弊;由于这是您的项目,我将讨论这些方面并推动决策作为练习留给读者

最后:一张卡片不应该知道被拒绝或被记录。一张卡片就是一张卡片。试想一下你试图对现实世界的领域进行建模的方式。纸牌游戏中的一张牌一点也不会变。它总是只是一张纸板,上面印着什么东西。它没有状态。唯一具有状态的东西:包含卡对象的各种堆。

您可以查看