我一直都知道Singletons是“糟糕的”,但直到现在我已经从C ++转向Java,我决定找到解决方法。从一点阅读中,我发现工厂或依赖注入都可以完成这项工作,但我想对此进行一些确认。
作为一个例子,我即将编写一个存储Map<String, Animation>
的AnimationCache单例。不同的类应该能够(基本上)在任何地方访问该类,以便他们可以轻松有效地加载动画。使用DI的等效代码看起来很简单的一个非常简单的例子。
此外,Guice是非网络应用程序DI的良好框架吗?我已经使用Spring进行Web开发,但我不太确定它是否适用于游戏。
答案 0 :(得分:5)
Spring和Guice会很好。我个人更喜欢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;
}
// ...
}
我个人更喜欢构造函数注入,但您也可以使用setter注入或字段注入。
请注意,DI的目的不是为了拥有“轻松的单身人士”。它的主要目的是通过注入模拟依赖项(这里是一个模拟AnimationCacheClient
实例)使代码(AnimationCache
,这里)容易单元格。
答案 1 :(得分:1)
使用Spring,DI非常简单。使用@Autowired注释,您甚至不需要额外的xml来连接或使用setter方法。类中的成员需要访问之前已经成为单例的成员。
答案 2 :(得分:1)
我最近在Singleton上“借用了”这个thread以及它可能有多糟糕(或没有)以及你可以做些什么来绕过它。非常值得一读。