博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习手记14 - 单例对象
阅读量:7048 次
发布时间:2019-06-28

本文共 1051 字,大约阅读时间需要 3 分钟。

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的话可以考虑使用静态内部类。

######

转载于:https://www.cnblogs.com/amunote/p/5595340.html

你可能感兴趣的文章
为什么使用Reazor
查看>>
使用intellij idea打包并部署到外部的tomcat
查看>>
jz2440存储管理实验【学习笔记】
查看>>
SQL Server 关于列的权限控制
查看>>
springboot - Constructor、@Autowired、@PostConstruct分析
查看>>
InnoDB recovery过程解析
查看>>
WPF 中动态创建和删除控件
查看>>
springboot+mysql实现quartz集群搭建
查看>>
docker 构建 https 私有仓库 Registry
查看>>
Oracle导出数据EXP00106错误
查看>>
php 的session机制 和ecshop session机制
查看>>
[转]Node.js tutorial in Visual Studio Code
查看>>
ubuntu18.04下搭建深度学习环境anaconda2+ cuda9.0+cudnn7.0.5+tensorflow1.7【原创】【学习笔记】...
查看>>
需求管理和项目管理
查看>>
转: Tsung:开源多协议分布式负载&压力测试工具
查看>>
props default 数组/对象的默认值应当由一个工厂函数返回
查看>>
鼓浪屿
查看>>
alloc_skb申请函数分析
查看>>
WPF PRISM开发入门二(Unity依赖注入容器使用)
查看>>
使用 data-* 属性来嵌入自定义数据:
查看>>