Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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 访问用户的策略模式';s成员_Java_Design Patterns_Strategy Pattern - Fatal编程技术网

Java 访问用户的策略模式';s成员

Java 访问用户的策略模式';s成员,java,design-patterns,strategy-pattern,Java,Design Patterns,Strategy Pattern,我很难找到适合我想做的事情的模式 我有两种游戏模式的方块游戏。在一种模式中,任何移除的块都将被从屏幕顶部掉落的新块替换。在另一种模式中,移除的块被从底部升起的一排新的块替换,并将整个场向上推。所以我认为最好使用策略模式来实现这一点 现在的问题是,这个策略需要修改对游戏场中现有块的所有位置的访问,但是很明显,信息存在于策略的用户类(游戏类)中,我不能有循环依赖关系 我可以通过整个字段作为引用,但我还有一个额外的问题,即所有块生成代码都位于Game类中(我认为应该是这样)。所以我想到的唯一一件事就是

我很难找到适合我想做的事情的模式

我有两种游戏模式的方块游戏。在一种模式中,任何移除的块都将被从屏幕顶部掉落的新块替换。在另一种模式中,移除的块被从底部升起的一排新的块替换,并将整个场向上推。所以我认为最好使用策略模式来实现这一点

现在的问题是,这个策略需要修改对游戏场中现有块的所有位置的访问,但是很明显,信息存在于策略的用户类(游戏类)中,我不能有循环依赖关系

我可以通过整个字段作为引用,但我还有一个额外的问题,即所有块生成代码都位于Game类中(我认为应该是这样)。所以我想到的唯一一件事就是将所有这些方法作为函数引用传递,但对我来说,这似乎有些过分了

有什么办法解决这个问题吗?也许我想使用战略模式是走错了方向。非常感谢您的帮助

关于在一个类中使用两个策略模式对象的任何提示的额外积分,这些对象需要访问依赖于用户类中成员的相同方法


我正在用Java编写代码,如果这有帮助的话

我想最后,假设一个现成的答案太复杂了

我有点遵循了Traxdata关于进一步解耦的暗示,以及Smith先生关于实际传递对其他对象的引用的建议

我的最终解决方案包括一个FieldManager、一个Field和一个Strategy类。FieldManager包含一个Field和Strategy实例。Field类包含块创建代码


因此,每当需要创建或删除块时,相应的函数都会调用相应策略的函数,并将引用传递给字段。因此,每当策略需要在字段中创建或删除某些内容时,它都可以通过字段对象进行创建或删除。

解耦始终是一个很好的起点。那么接口/侦听器呢?我在翻拍《轰炸机人》时遇到了一些类似的问题。尽量抽象地编写程序——这为我节省了很多时间。首先,你不能用Java传递“函数引用”,你必须创建某种函数对象来解决这个问题。您可以使用的另一个模式是模板。在任何情况下,我都不认为传递对其他对象的引用以供其使用有什么困难。