2016-04-06 56 views
1

我想实现一个工厂。在我的应用程序中必须只有这个工厂的一个实例。我的工厂在创建第一个MyObject之前需要做一些准备工作,然后才能完成。有没有更好的办法做到这一点比懒洋洋地创建Scala对象onload

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

回答

6

object S,所以你可以把在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