在Scala中,我如何给Singleton一个构造函数?

时间:2010-06-27 23:35:10

标签: scala scala-2.8

我的设计包含一个小型数据库抽象,我将每个数据库实现为Singleton(好吧,object),在数据库中使用自定义方法进行代码调用的几个操作(它主要是一个日志解析器) ,将有趣的统计信息转储到数据库中。)

如果可能的话,我想构建Singleton数据库类,这样在运行时,每个都使用配置值构造(并且这些值对于程序运行时的其余部分保持不变)。这样我就可以更好地测试代码了(因为我可以使用Mockito或其他一些方法来模拟数据库)。

我仍然只学习Scala,但似乎没有办法将构造函数附加到Singleton,并且会对这个问题的任何输入表示感谢 - 有没有更好的方法来做我正在做的事情?是否有一些构建Singleton的首选方法?

提前干杯以获得任何帮助。

3 个答案:

答案 0 :(得分:13)

只需将构造函数代码放在对象定义的主体中:

object Foo {
    println("Hello") // This will print hello the first time
                     // the Foo object is accessed (and only
                     // that once).
}

答案 1 :(得分:4)

而不是使用单例(难以测试)。无论是谁创建演员都可以创建数据库会话工厂并将其传递给每个演员,然后它仍然共享......并且可以测试。

答案 2 :(得分:0)

不确定这是否是您正在寻找的,但正如文章所解释的那样,使用apply方法而不扩展基类

case class Foo(name:String)
object Foo { def apply(name:String) = new Foo(name) }

enter link description here