Scala对象加载

Scala对象加载,scala,object,design-patterns,factory,Scala,Object,Design Patterns,Factory,我想建立一个工厂。我的应用程序中只能有一个此工厂的实例。我的工厂在创建第一个MyObject之前需要做一些准备,只有在那时。还有比这更好的方法吗 object MyObjectFactory { private var isApplied:Boolean = false def apply() = { if(!isApplied) { isApplied = true; onLoad }

我想建立一个工厂。我的应用程序中只能有一个此工厂的实例。我的工厂在创建第一个MyObject之前需要做一些准备,只有在那时。还有比这更好的方法吗

object MyObjectFactory {
    private var isApplied:Boolean = false
    def apply() = {
        if(!isApplied) {
            isApplied = true;
            onLoad
        }
        //do something
        new MyObject
    }
    def onLoad {
        //prepare environment
    }
}
对象是惰性创建的,因此您可以将onLoad逻辑放入构造函数中。它将在第一次使用时执行,而不仅仅是导入

scala> object Factory {
     |   onLoad()
     |   def apply() = "new object"
     |   def onLoad() = println("onload")
     | }
defined object Factory
// no onLoad triggered yet

scala> Factory()
onload
res0: String = new object
// onLoad was triggered

scala> Factory()
res1: String = new object
// onLoad was not triggered
对象是惰性创建的,因此您可以将onLoad逻辑放入构造函数中。它将在第一次使用时执行,而不仅仅是导入

scala> object Factory {
     |   onLoad()
     |   def apply() = "new object"
     |   def onLoad() = println("onload")
     | }
defined object Factory
// no onLoad triggered yet

scala> Factory()
onload
res0: String = new object
// onLoad was triggered

scala> Factory()
res1: String = new object
// onLoad was not triggered