2013-03-26 56 views
1

我正在写一个桌面MMO游戏,我想咨询一下架构问题。我有NetworkManager,ClientWindow,CachingTextureAtlas等类,它们只需要在一个游戏实例中使用,这里是我的问题:使它们成为单例是否正确?如果是的话,这将是一种通过全球课程进行的互动,从设计的角度来看,这并不是很好,因为在我看来,如果没有,我们会将它们组成一个外观,我们必须将这些全部传递给构造函数太多的课程也不方便。什么是更好的选择?组成vs多个单身人士

回答

5

单身人士应该小心使用(几乎从不)。我见过很多地方,最近的情况是hibernate会话工厂,最初我们认为单个实例应该没问题,但随后出现了多个实例的场景,最终重构了代码。 其他问题是,如果你正在为你的代码编写单元测试,那么对于所有依赖这些单例类的类来说,这将是一场噩梦。

其中一个解决方案可能是注入一种工厂,它可以为您提供这些实例/它给您一种间接方式并避免直接耦合。另一种方法是拥有一个容器(例如pico容器)并注入构造函数依赖关系,这也是您已经指出的。

+2

+1表示依赖注入。错过了:) – greenkode 2013-03-26 07:57:57

+0

所以你反对单例方法,你建议的是让工厂持有所需类的实例?或者每次都提供一个新实例?我在服务器端使用Spring DI,我会考虑远离单身人士,但我们应该如何处理客户端,在Spring中没有任何意义?而在CachingTextureAtlas的情况下,它是非常昂贵的,每次实例化它,谢谢;) – OneMoreVladimir 2013-03-26 08:00:02

+1

@OneMoreVladimir我宁愿去依赖注入。这会从调用它的方法中抽象出实现。因此您可以更改实现并很可能永远不必重构代码。 – greenkode 2013-03-26 08:02:30