文档章节

类和对象之单例对象(Singleton)

柳哥
 柳哥
发布于 2014/06/05 21:27
字数 532
阅读 100
收藏 0
点赞 0
评论 0

Scala比Java更为面向对象的特点之一是scala不能定义静态成员,而是代之以定义单例对象。除了用object关键字替换了class关键字以外,单例对象的定义看上去与类定义一致。


当单例对象与某个类共享同一个名称时,它就被称为是这个类的伴生对象。类和它的伴生对象必须定义在一个源文件里。类被称为是这个单例对象的伴生类。类和它的伴生对象可以互相访问其私有成员。如例:


结果:


对于Java程序员来说,可以把单例对象当作是Java中可能会用到的静态方法工具类。也可以用类似的语法做方法调用: 单例对象类 . 方法名,如上例:
Test1.show4("class")
然而单例对象不只是静态方法工具类。它同样是头等的对象
定义单例对象并没有定义类型(在scala的抽象层次上说)。如果只有Test1对象的定义,就不能建立Test1类型的变量或者可以认为,Test1类型是由单例对象的伴生类定义的


类和单例对象间的差别
单例对象不带参数,而类可以。因为单例对象不是用new关键字实例化的,所以没机会传递给它实例化参数。每个单例对象都被实现为虚构类(synthetic class)的实例,并指向静态的变量,因此它们与Java静态类(静态内部类??)有着相同的初始化语义。特别要指出的是,单例对象在第一次被访问的时候才会被初始化
注:虚构类的名字是对象名加上一个美元符号($)。因此单例对象Test1的虚构类是:Test1$。
另外,没有伴生类的单例对象被称为独立对象。它可以用在很多地方,例如作为相关功能方法的工具类,或者定义scala应用的入口点。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 202
博文 394
码字总数 347782
作品 0
杭州
技术主管
23种设计模式(1):单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名、属性、方法 2.以<<开头和以>>结尾的为注释...

LCZ777 ⋅ 2014/07/05 ⋅ 0

设计模式学习整理(二)

单例模式 定义与结构 单例模式又叫做单态模式或者单件模式。在GOF书中给出的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”通常用来代表那些本质上具...

send2ocean ⋅ 2014/03/19 ⋅ 0

C++单例模式实现

C++单例模式的实现方法多样化,应用比较灵活,大家可以根据自己编程中不同的需求来决定使用哪种方法来实现这一功能。 C++是一款应用非常广泛的计算机编程语言。它支持多种程序设计风格,其中...

CYXLXD ⋅ 2010/11/27 ⋅ 0

设计模式------单利的模式

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 1.单例模式的要点:   显然单例模式的要点有三个;一是...

Im刘亚芳 ⋅ 2015/04/21 ⋅ 0

java高级工程师面试问题集结号(two)

单例模式的优缺点 实现要点 Singleton模式是限制而不是改进类的创建。Singleton类中的实例构造器可以设置为Protected以允许子类派生。Singleton模式一般不要支持Icloneable接口,因为这可能导...

布道牛 ⋅ 2016/09/09 ⋅ 0

设计模式1——Singleton设计模式

Singleton单例模式是最简单的设计模式,它的主要作用是保证在程序运行生命周期中,使用了单例模式的类只能有一个实例对象存在。单例模式实现了类似C语言中全局变量的功能,单例模式常用于注册...

小米米儿小 ⋅ 2013/12/05 ⋅ 0

Hutool之单例池——Singleton

为什么会有这个类 平常我们使用单例不外乎两种方式: 在对象里加个静态方法getInstance()来获取。此方式可以参考 【转】线程安全的单例模式 这篇博客,可分为饿汉和饱汉模式。 通过Spring这类...

路小磊 ⋅ 2014/06/28 ⋅ 0

设计模式学习笔记十:单例模式(Singleton Pattern)

1.概述 单例模式(Singleton Pattern)又称单件模式,单例模式保证一个类仅有一个实例,并提供一个访问的他的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例...

长平狐 ⋅ 2013/06/17 ⋅ 0

单例模式是设计模式中最简单的形式之一

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例...

飞你不可 ⋅ 2017/03/13 ⋅ 0

单例模式的N种写法

鲁迅在《孔乙己》说孔乙己会写N种不同的回字, 回、囘、囬…… 。那今天我们来写几种常见的单例模式。单例模式在所有的设计模式书籍里都是作为第一个模式来讲解,因为它给人简单易于理解的感...

robin-yao ⋅ 2016/12/27 ⋅ 5

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 9分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 21分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 54分钟前 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 今天 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部