在 Scala 中,是沒有 static 這個東西的,可是它也爲咱們提供了單例模式的實現方法,那就是使用關鍵字 object。程序員
Scala 中使用單例模式時,除了定義的類以外,還要定義一個同名的 object 對象,它和類的區別是,object對象不能帶參數。ide
當單例對象與某個類共享同一個名稱時,他被稱做是這個類的伴生對象:companion object。你必須在同一個源文件裏定義類和它的伴生對象。類被稱爲是這個單例對象的伴生類:companion class。類和它的伴生對象能夠互相訪問其私有成員。函數
package demo object Marker { private val markers: Map[String, Marker] = Map( "red" -> new Marker("red"), "blue" -> new Marker("blue"), "green" -> new Marker("green") ) def getMarker(color:String) = { if(markers.contains(color)) markers(color) else null } def main(args:Array[String]){ // println(new Marker("red")) // println(Marker.getMarker("blue")) } } class Marker private(var color:String){ println("建立" + this) override def toString():String = { return "顏色標記:"+color } }
結果this
建立顏色標記:red 建立顏色標記:blue 建立顏色標記:green
對於Java程序員比較陌生的是包含了main函數的object語句。這樣的語句定義了一個單例對象:一個有且僅有一個實例的類。object語 句在定義了一個叫HelloWorld的類的同時還定義了一個叫HelloWorld的實例。這個實例在第一次使用的時候會進行實例化。code