在 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