• scala学习手记14


    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就是一个单例。单例一旦定义完毕,它的名字就表示了这个单例的唯一实例。用单例表示单例可以作为参数传递给函数,就像通常传递实例一样。

    执行下上面的这段代码:

    image

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

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

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

    ######

  • 相关阅读:
    JUnit手记
    Guava手记
    深表浅表拷贝
    异常问题仓库
    记录一次“记录超长”
    高二数学微课堂[教学视频]
    高一数学微课堂[教学视频]
    用导数研究函数的性质
    均值不等式的常见使用技巧
    一元二次方程根的分布
  • 原文地址:https://www.cnblogs.com/amunote/p/5595340.html
Copyright © 2020-2023  润新知