2011-08-23 70 views
5

我有一个应用程序,其中有一些类可以处理某些特定的功能,具有与应用程序本身相同的生命周期,并且用于程序的许多部分。由于最后一个原因,我称他们为服务。例如,音频服务播放音频文件并执行与音频相关的许多其他事情。服务的单例/静态类

Theese类在应用程序启动时仅实例化一次,并且每种类型都有多个类没有意义。

因为我已经阅读了很多关于单身人士的回答,因为他们的使用方式令人沮丧,我继续在需要的时候传递一些关于服务的服务。 随着项目的不断增长,我发现自己有许多需要在构造函数中引用服务的类,在某些情况下,甚至为这些服务设置了外观,以避免添加所有服务引用。

我想我做错了。我认为这应该是一个很好的用于静态/单例类。

这是一个正确的方法吗?

回答

1

我看到一个答案建议介绍Spring。在封面之下,Spring仍然在需要的地方传递该参考。

与其向应用程序中引入新框架,为什么不使用Singleton呢?如果它完成了这项工作,并且比传递服务参考更容易维护,我说使用它。

如果您对Singletons的担忧是因为它们对可测试性的影响,请使用Dependency Injection(该模式,而不是框架)来减少与实现的耦合。

2

看起来你需要一个具有自动装配能力的依赖注入容器。如果您使用的是Java,请考虑Spring。

0

单例实际上代表的只是应用程序生命周期中仅应创建一次的对象。这些对象实际上包含一些固定设置。比方说,你有一个解析器类只用于解析html。 HTML的根目录应该是“”标记。此外,您不希望从此解析器类创建大量实例,因为每个类的实例都会执行相同的操作。实例会得到一串html,并且会返回X. 如果您认为您的课程一次只能完成一件事,那么您可以选择单身。但是,如果你这样说,例如,你的音频服务应该一次播放不同的音频,我认为创建一个类的实例比单独实现要好。

0

我同意MikeG。使用单身。既然你说这些类主要是面向服务的,我不会期望它会导致任何问题。