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 - 单例对象的更多相关文章

  1. 探索Scala(3)-- 单例对象

    研究一下Scala语言的单例对象(Singleton Objects),为下一篇文章做准备. static不是keyword 上一篇文章提到过,interface并非Scala语言keyword,能够 ...

  2. Scala入门1(单例对象和伴生类)

    一.Hello World程序的执行原理 参考http://blog.csdn.net/zhangjg_blog/article/details/22760957 object HelloWorld{ ...

  3. Scala 孤立对象和单例对象方法体的用法和例子

    [学习笔记] 1  以object关键字修饰一个类名,这种语法叫做孤立对象,这个对象是单例的. 相当于将单例类和单例对象同时定义.相当于java中的单例,即在内存中只会存在一个Test3实例.创建一个 ...

  4. Scala单例对象、伴生对象实战详解

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...

  5. Scala单例对象和伴生对象

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...

  6. scala学习手记15 - 独立对象和伴生对象

    上一节中的单例对象MarkerFactory 就是一个独立对象的例子.尽管它管理着Marker类,但是它并没有关联到任何类上. scala也可以创建关联到类上的对象.这样的对象同类共享同一个名字,这样 ...

  7. 【scala】类的定义和单例对象

    一.类的定义 Scala类的定义跟JAVA中类的定义基本是一样的. 示例 class ChecksumAccumulator{ var sum = 0;//Scala默认关键字为public priv ...

  8. 010-Scala单例对象、伴生对象实战详解

    010-Scala单例对象.伴生对象实战详解 Scala单例对象详解 函数的最后一行是返回值 子项目 Scala伴生对象代码实战 object对象的私有成员可以直接被class伴生类访问,但是不可以被 ...

  9. apply 伴生对象 单例对象

    apply(): 当类或者对象有一个主要用途时,apply方法提供了很好语法机制 scala> class Foo {} defined class Foo scala> object F ...

随机推荐

  1. 并发编程7 管道&事件&信号量&进程池(同步和异步方法)

    1,管道 2.事件 3.信号量 4.进程池的介绍&&进程池的map方法&&进程池和多进程的对比 5.进程池的同步方法和异步方法 6.重新解释同步方法和异步方法 7.回调 ...

  2. 使用ADO如何获得SQLSERVER 2K的数据库名的列表

    打开数据库连接_ConnectionPtr m_pConn;_RecordsetPtr m_pRs;m_pConn.CreateInstance(__uuidof(Connection));m_pRs ...

  3. 墨菲定律(Murphy's Law)

    https://baike.baidu.com/item/墨菲定律/746284?fr=aladdin 墨菲定律是一种心理学效应,是由 爱德华·墨菲(Edward A. Murphy)提出的. 主要内 ...

  4. BZOJ2648: SJY摆棋子&&2716: [Violet 3]天使玩偶

    BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...

  5. Docker libnetwork(CNM)设计简介

    The Container Network Model CNM由以下三个组件构成:Sandbox,Endpoint以及Network Sandbox 一个Sandbox包含了一个容器网络栈的配置.其中 ...

  6. 【我的Android进阶之旅】 解决bug: Expected file scheme in URI: content://downloads/my_downloads/12

    一.错误描述 今天测试MM用HTC手机测试某个模块的时候crash了,抓log后发现是使用DownloadManager下载apk安装包然后自动安装的时候,抛了异常:java.lang.Illegal ...

  7. 我的Android进阶之旅------>解决错误: java.util.regex.PatternSyntaxException: Incorrect Unicode property

    1.错误描述 今天使用正则表达式验证密码的时候,报了错误 java.util.regex.PatternSyntaxException: Incorrect Unicode property near ...

  8. 3509.com 纵横天下虚拟主机,垃圾中的战斗机

    被纵横天下主机(3509.com)这间垃圾公司气疯了,他们公司自己要更换server(空间).居然把我挂在上面的站点数据弄丢了.并且更换连一封Email通知都没有.更离谱的是,跟他们反映这个情况后.他 ...

  9. Leetcode 之 Set Mismatch

    645. Set Mismatch 1.Problem The set S originally contains numbers from 1 to n. But unfortunately, du ...

  10. python web框架 Django的APP以及目录介绍 django 1.11版本

    如果有很多业务请求函数 应该放在app目录 很多业务放在主站上 当用户一点跳到分站 例如 一个项目叫运维平台  他的业务 有资产管理 私有云 监控 不同业务线 chouti项目 - chouti - ...