gpt4 book ai didi

java - 有没有一种设计模式可以提供更有效的解决方案?

转载 作者:行者123 更新时间:2023-12-02 06:52:18 25 4
gpt4 key购买 nike

我的系统存在问题\设计问题。我将从我所在的地方开始:

我正在用 Java 创建一个游戏引擎,游戏组件通常需要引用游戏的主\单例实例(世界、文件系统等...) - 所以我将我的 Game 类设置为静态全局变量类全局。每当在代码中我需要打开一个文件时,我会编写如下内容:

Global.game.getFilesystem().openFile(...)

根本没有实用的方法来不断传递这个 Game 对象。我一直像躲避瘟疫一样避免使用单例设计模式,而宁愿以自己的方式解决这个问题......

无论如何,现在我有了我的 GameCore 库,就是这样。我现在正在用它实现一个游戏。显然,在这个过程中我想扩展Game。问题是,现在我的类需要一种方便的方式来访问相同类型的资源 - 这都很好 - 除了它不能使用 Global.game 因为 Global.game 只能被引用为抽象类 Game (即使它包含 MyRpgGame 的实例),我可能需要它的类型为 MyRpgGame。当然,我可以进行类型转换,但它在整个代码中是困惑且恒定的。所以我想出的唯一解决方案(尽管我真的不喜欢它......)是这样的:

我通过 Game.game 或 RpgGame.game 等引用游戏...

public abstract class Game
{
...
public static Game game = null;

public Game()
{
if(game != null)
throw new InitializationException("Cannot instantiate multiple instances of game.");
game = this;

...
}

然后在我的RpgGame中,我隐藏了Game中的静态场游戏:

public class RpgGame extends Game
{
public static RpgGame game = null;

public RpgGame()
{
if(game != null)
throw new InitializationException("Cannot instantiate multiple instances of game.");

game = this;
}

最佳答案

您需要的是依赖注入(inject)支持。它将消除您的所有问题,因为依赖项注入(inject)可以基于接口(interface),而不是特定的类,并且您不必传递它们 - 它们只会自动注入(inject)。

查看Google GuiceSpring Framework 。Google Guice 更轻量级,但 Spring Framework 提供了大量内置功能,并且拥有庞大的生态系统。

关于java - 有没有一种设计模式可以提供更有效的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com