2016-04-06 64 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