如果Singletons如此糟糕,为什么Scala会为他们提供语言支持?

fre*_*low 13 singleton static scala anti-patterns object

可能重复:
为什么单例对象更面向对象?

为什么Scala对Singleton反模式有语言支持?如果Scala static从Java 继承了该关键字,那么该关键字的合法用例object是什么?

And*_*yle 11

至少有一个前面的区别,因为object在Scala中实际上是一个对象(即一个实例),而不是在Java中,它只是在类本身上调用的方法.

这意味着它避免了关于单身人士的一个主要抱怨 - 因为它一个实例,它可以被传递并连接到方法中,因此可以在测试期间换掉其他实现,等等.如果有的话,它是语法糖的推荐替代单例 - 使用一个getInstance()返回默认单个实例的方法的类.

也就是说,我认为Singleton反模式更多的是设计而不是语言特征.如果您构建代码库,以便在大多数类中隐式连接某些单片依赖关系,那么无论语言功能如何,您都会遇到更改它的问题.

有合法的用例objectsScala中(例如,使用case objects用于消息演员,或具有其中几个延伸sealed trait作为替代枚举).语言功能可能会被滥用,但在我看来,它比Java更容易被滥用,而且static更有用.


Jan*_*Jan 6

没有国家的单身人士并不那么糟糕.我看到对象(在scala中)作为放置函数(行为)的模块.