这个问题在这里已经有了答案:
9年前关闭。
Possible Duplicate:
Why are singleton objects more object orientated?
为什么 Scala 有对单例反模式的语言支持?如果 Scala 继承了
static
来自 Java 的关键字,object
的合法用例是什么?关键字会被留下?
最佳答案
至少有一个前期差异,即 object
在 Scala 中实际上是一个对象(即一个实例),而不是在 Java 中它只是在类本身上调用的方法。
这意味着它避免了关于单例的主要提示之一——因为它是一个实例,它可以被传递并连接到方法中,因此可以在测试等期间被替换为其他实现。如果有的话,它是推荐的单例替代品 - 有一个带有 getInstance()
的类方法返回默认的单个实例。
也就是说,我认为单例反模式更多的是关于设计而不是语言特性。如果您构建您的代码库,以便在大多数类中隐式连接一些整体依赖项,那么您将在更改它时遇到问题 - 无论语言功能如何。objects
有合法用例在 Scala 中(例如,将 case objects
用于 messages to Actors ,或者让其中几个将 sealed trait
扩展为 alternative to enums )。语言特性可以被滥用,但在我看来,它不如 Java 的 static
容易被滥用。 ,而且更有用。
关于scala - 如果单例如此糟糕,为什么 Scala 为它们提供语言支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11755826/