2016-04-06 9 views
1

私はファクトリを実装したいと思います。私のアプリにはこのファクトリのインスタンスが1つだけ必要です。私の工場は最初のMyObjectを作成する前に準備をする必要があります。あとで生成されScalaオブジェクトのロード

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