2016-04-06 2 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 с созданы лениво, так что вы можете просто поставить логику 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