Scala对象onload

Com*_*ler 1 design-patterns factory scala object

我想实施一个工厂.在我的应用程序中只有一个这个工厂的实例.我的工厂需要在创建第一个MyObject之前做一些准备,然后才开始.有没有更好的方法来做到这一点

object MyObjectFactory {
    private var isApplied:Boolean = false
    def apply() = {
        if(!isApplied) {
            isApplied = true;
            onLoad
        }
        //do something
        new MyObject
    }
    def onLoad {
        //prepare environment
    }
}
Run Code Online (Sandbox Code Playgroud)

knu*_*ker 6

objects是懒惰创建的,因此您可以将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
Run Code Online (Sandbox Code Playgroud)