gpt4 book ai didi

java - 使用依赖注入(inject)作为单例的替代方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:03 24 4
gpt4 key购买 nike

我一直都知道单例是“坏的”,但直到现在我已经从 C++ 转向 Java,我才决定找到绕过它们的方法。通过一些阅读,我发现工厂或依赖注入(inject)都可以完成这项工作,但我想对此进行一些确认。

举个例子,我正要编写一个 AnimationCache 单例来存储 Map<String, Animation> .不同的类应该能够(基本上)在任何地方访问这个类,以便它们可以轻松高效地加载动画。一个非常简短的示例,说明使用 DI 的等效代码会是什么样子。

此外,Guice 是非 Web 应用程序的 DI 的良好框架吗?我已经将 Spring 用于 Web 开发,但我不确定它是否适用于游戏。

最佳答案

Spring 和 Guice 都可以。对于纯依赖注入(inject),我个人更喜欢 Guice,但 Spring 提供的更多。

代码看起来像这样:

public class AnimationCacheClient {

private AnimationCache cache;

@Autowired // for Spring, or
@Inject // for Guice (but I think Spring also supports it now)
public AnimationCacheClient(AnimationCache cache) {
this.cache = cache;
}

// ...
}

我个人更喜欢构造函数注入(inject),但您也可以使用 setter 注入(inject)或字段注入(inject)。

请注意,DI 的目的不是要“简单的单例”。它的主要目的是通过能够注入(inject)模拟依赖项(此处为模拟 AnimationCache 实例),使代码(此处为 AnimationCacheClient)易于单元稳定。

关于java - 使用依赖注入(inject)作为单例的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145135/

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