码迷,mamicode.com
首页 > 其他好文 > 详细

scala学习手记14 - 单例对象

时间:2016-06-17 23:56:55      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

java中的单例模式都很熟悉了:简单地说就是一个类只能有一个实例。在scala中创建单例对象非常简单,创建类时使用object关键字替换class即可。因为单例类无法初始化,所以不能向它的主构造函数传递参数。

下面是一个单例的示例:

class Marker(val color: String) {

  println("Creating " + this)

  override def toString(): String = "marker color " + color
}

object MarkerFactory {
  private val markers = 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
}

println(MarkerFactory getMarker "blue")
println(MarkerFactory getMarker "blue")
println(MarkerFactory getMarker "red")
println(MarkerFactory getMarker "red")
println(MarkerFactory getMarker "yellow")

其中的MarkerFactory就是一个单例。单例一旦定义完毕,它的名字就表示了这个单例的唯一实例。用单例表示单例可以作为参数传递给函数,就像通常传递实例一样。

执行下上面的这段代码:

技术分享

MarkerFactory的getMarker方法()像足了java中静态方法的调用。

还有一点要注意的就是Map对象的赋值和取值,和Python很像。

此外,最后一点,因为在这个示例程序中Marker类只会被MarkerFactory调用,所以有必要保护好Marker,使之不能被其它类调用。上面的代码没有做到这一点。如果是Java的话可以考虑使用静态内部类。

######

scala学习手记14 - 单例对象

标签:

原文地址:http://www.cnblogs.com/amunote/p/5595340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!