java - 消除单例

标签 java singleton factory

我一直在阅读大量有关使用单例类如何由于隐藏的依赖关系、难以测试等原因而成为编程中的不良做法的文章。

我读过的很多论坛帖子都说你仍然可以保持单例的主要功能,即只允许一个实例而不使用单例模式。

我想知道是否有人可以举一个实际的例子。许多帖子都建议使用工厂类来创建清楚显示依赖关系的单例实例。对我来说,这似乎就像采用多个单例并将它们组合成一个单一的工厂单例,这会遇到同样的问题吗?

最佳答案

“单例模式”的问题其实不在于单例本身,而在于单例类中不灵活的静态工厂方法。而且我相信即使在 GoF 书中,这也被认为是如何访问单例的示例,而不是最终的实现模型。

A lot of posts have suggested using a factory class to create singleton instances where the dependencies are clearly shown. To me this just seems like taking multiple singletons and combining them into a single factory singleton which would have the same problems?

不同之处在于,这个单一工厂随后成为您维护依赖关系的单一点。

事实上,普遍接受的解决方案是使用像Spring 这样的依赖注入(inject)框架。或 Guice它基本上就是这样一个具有非常强大和灵活的配置机制的单一工厂,它可以做的不仅仅是管理单例。

关于java - 消除单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162443/

相关文章:

java - 读取 .owl 文件时出现 org.apache.jena.riot.RiotException

java - 在 Bean Validation 中使用组的想法是什么

java - 在Java中将base25字符串转换为二进制字符串

java - hibernate 5 : how to cast connection's metadata to DialectresolutionInfo

oop - 在 Dart 中,是否可以在单例中传递参数?

scala - 如何使用 Scala 的单例对象类型?

java - 工厂类进行数据库/服务调用

java - 创建 Java 单例类的 2 个实例

c++ - (静态初始化/模板实例化)工厂模式的问题

c++ - 线性链式工厂和 move 语义