我有一个应用程序,它有一些处理某些特定功能的类,其生命周期与应用程序本身相同,并且可以在程序的许多部分中使用。由于这最后一个原因,我称之为服务。 例如,音频服务播放音频文件并执行许多与音频相关的事情。
Theese类只在应用程序启动时实例化一次,每种类型有多个没有任何意义。
由于我在SO上阅读了很多关于单身人士的答案而不鼓励他们使用,我继续在必要时传递对thoose服务的引用。 随着项目的不断发展,我发现自己有许多类需要在构造函数上提供服务引用,在某些情况下甚至是对这些服务的外观以避免添加所有服务引用。
我认为我做错了。我认为这应该是静态/单例类的好用。
这是正确的做法吗?
答案 0 :(得分:2)
您似乎需要具有一些自动装配功能的依赖注入容器。如果您使用的是Java,请考虑使用Spring。
答案 1 :(得分:1)
我看到一个答案建议引入Spring。在封面下,Spring仍然在需要的地方传递该引用。
为什么不使用Singleton而不是在应用程序中引入新框架?如果它完成了这项工作并且比传递服务引用更容易维护,我说使用它。
如果您对Singletons的关注是由于它们对可测试性的影响,请使用Dependency Injection(模式,而不是框架)来减少与实现的耦合。
答案 2 :(得分:0)
Singleton实际上代表的对象应该只在应用程序生命周期中创建一次。这些对象实际上包含一些固定设置。假设您有一个解析器类,仅用于解析html。 HTML的根应该是“”标签。此外,您不希望从此解析器类创建大量实例,因为每个类的实例都会执行相同的操作。实例将获得一串html并将返回X. 如果您认为您的课程一次只能做一件事,那么您可以选择单身人士。但是,如果您说,例如,您的音频服务应该一次播放不同的音频,我认为创建一个类的实例比制作单例更好。
答案 3 :(得分:0)
我同意MikeG。使用单身人士。既然你说这些类主要是面向服务的,我不会指望它会导致任何问题。