Scala singleton作为另一个类的实例

Scala singleton作为另一个类的实例,scala,class,singleton,instance,Scala,Class,Singleton,Instance,我有一个singleton对象,它为我的应用程序处理数据库内容,但我希望在测试期间使用一个类似的类,这样我就可以有许多相互不干扰的较小的测试数据库 我可以在启动时删除单例并创建数据库类的新实例,但这意味着我必须将这个实例传递到需要数据库操作的任何地方,我不希望这样 我可以制作一个作为数据库类单个实例接口的单例。像这样的事情: object DB{ val db = new Database() def set(a:Int,b:Int) = db.set(a,b) def

我有一个singleton对象,它为我的应用程序处理数据库内容,但我希望在测试期间使用一个类似的类,这样我就可以有许多相互不干扰的较小的测试数据库 我可以在启动时删除单例并创建数据库类的新实例,但这意味着我必须将这个实例传递到需要数据库操作的任何地方,我不希望这样

我可以制作一个作为数据库类单个实例接口的单例。像这样的事情:

object DB{
    val db = new Database()
    def set(a:Int,b:Int) = db.set(a,b)
    def get(a:Int) = db.get(a)
}
这感觉有点愚蠢和毫无意义,尤其是当数据库类相当大时,我不得不对所有方法都这样做。有没有更好的办法来解决这个问题


谢谢

实现这一点的最佳方法是使用蛋糕模式,但实际上您必须扩展
DB
类中的所有方法

为了做到这一点,我将遵循这篇文章:


创建蛋糕模式后,您只需要有一个特性来实现仅用于测试源代码测试的“otherdb”。当然,这个特性在主要源代码上实现了“真正的DB”。

在我看来,您的问题涉及到一个类有多个不同的入口,并且能够作为单个对象访问它们。为了清楚起见,请注意,这是一种矛盾

因此,您需要有一个对您想要使用的任何实际实例的引用。然后,要么直接公开这个实例(
DB.instance.doSomething()
),要么像您提到的那样努力转发API


在我看来,你对这两个都不满意。如果语法
DB.instance
困扰您,您可以将此实例放在中,并直接使用它。您还可以
import DB.\u
直接访问
实例
变量

object DB
和它的测试版本有什么不同?@m-z他们会有不同的数据库文件,并且不会访问其他版本的数据库文件