2016-04-06 20 views
1

Bir fabrika uygulamak istiyorum. Uygulamamda bu fabrikanın yalnızca bir örneği olmalı. Fabrikamın ilk MyObject'i oluşturmadan önce ve sonra sadece bir hazırlık yapması gerekiyor. lazily oluşturulanScala nesnesi yüklüyor

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

cevap

6

object s'den daha bunu yapmak için daha iyi bir yolu var mı, bu yüzden sadece yapıcı içine onLoad mantığı koyabilirsiniz. Sadece ithal değil, ilk kez çalıştırılacak.

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