Service 服务的单例/静态类

Service 服务的单例/静态类,service,singleton,Service,Singleton,我有一个应用程序,它有一些类来处理一些特定的函数,其生命周期与应用程序本身相等,并且打算在程序的许多部分中使用。出于最后一个原因,我称之为服务。 例如,音频服务播放音频文件并执行许多其他与音频相关的操作 这些类在应用程序启动时只实例化一次,并且每个类型有多个类没有任何意义 因为我在这里已经阅读了很多关于单身人士的答案,所以不鼓励他们使用单身人士,所以我继续在需要时传递对这些服务的引用。 随着项目的发展,我发现我自己有很多类,它们的构造函数上需要一个服务引用,在某些情况下甚至需要这些服务的一个门面

我有一个应用程序,它有一些类来处理一些特定的函数,其生命周期与应用程序本身相等,并且打算在程序的许多部分中使用。出于最后一个原因,我称之为服务。 例如,音频服务播放音频文件并执行许多其他与音频相关的操作

这些类在应用程序启动时只实例化一次,并且每个类型有多个类没有任何意义

因为我在这里已经阅读了很多关于单身人士的答案,所以不鼓励他们使用单身人士,所以我继续在需要时传递对这些服务的引用。 随着项目的发展,我发现我自己有很多类,它们的构造函数上需要一个服务引用,在某些情况下甚至需要这些服务的一个门面,以避免添加所有的服务引用

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


这是一种正确的方法吗?

看起来您需要一个具有自动连接功能的依赖项注入容器。在使用java的情况下,考虑Spring。

< P>我看到一个答案是引入Spring。在封面下,Spring仍然在需要的地方传递引用

与其在应用程序中引入新的框架,为什么不使用单例呢?如果它完成了任务,并且比传递服务引用更容易维护,我建议使用它


如果您对单例的关注是因为它们对可测试性的影响,那么使用(模式,而不是框架)来减少与实现的耦合

Singleton实际上代表在应用程序生命周期中只应创建一次的对象。这些对象实际上包含一些固定设置。假设您有一个仅用于解析html的解析器类。HTML的根应该是“”标记。此外,您不希望从这个解析器类创建实例的加载,因为类的每个实例都将执行相同的操作。实例将获得一个html字符串,并将返回X。
如果你认为你的课程一次只能做一件事,你可以选择单件。然而,如果你说,例如,你的音频服务应该一次播放不同的音频,我认为创建一个类的实例比使它成为一个单独的类要好。

我同意MikeG的观点。使用单件。既然你说这些类大多是面向服务的,我就不指望它会引起任何问题