单例模式 | 学习笔记

简介: 快速学习单例模式

开发者学堂课程【Scala 核心编程 - 进阶单例模式学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9135


单例模式


内容介绍:

一、单例模式含义

二、单例模式的应用场景

三、单例模式的应用案例


一、单例模式含义

单例模式是指:

保证在整个的软件系统中,某个类只能存在一个对象实例。


二、单例模式的应用场景

比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建Session 对象。

SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory 就够,这是就会使用到单例模式。

Akka [ActorySystem 单例]底层也是运用的单例模式Actory system 对象不能有多个,一是因为没有意义,二是因为是重量级的,在实际运用中,单例模式也是存在的。


三、单例模式的应用案例

Scala 中没有静态的概念所以为了实现Java中单例模式的功能,可以直接采用类对象(即伴生对象)式构建单例对象

新建一个包,取名为singleton

1)方式1-懒汉式

新建一个 Scala class,name为TestSingleTon,Kind为Object

object TestSingleTon {

val instance1 = SingleTon.getlnstance

val instance2 = SingleTon.getlnstance

接下来比较 instance1是否等于 instance2

if (instance1 == instance2) {

println("相等")

结果发现相等,说明是同一个对象,因此就实现了单例模式。

//将SingleTon的构造方法私有化

class SingleTon private(){}  (令SingleTon这个类只能有一个)

object SingleTon {//这个SingleTon对应的是SingLeTon$

private var s:SingleTon = null

懒汉式是先去获取,如果发现云等于空再去进行创建然后再返回。

def getlnstance ={

if(s == null) {

s= new SingleTon

}

s}}

想要证明是懒汉式,需要查看底层代码,打开 Java Decompiler 工具,打开SingleTon$.class,怎么看是否是底层呢,打开以后发现里面的单例是private SingleTon,它并不是静态的,当去get一个instance的时候,使用s去进行获取,如果为空进行创建,如果不为空就返回,这就说明是之前java里面传统的懒汉式。

核心代码为

public singleTon getInstance() {

if (s() == null) {

s_ $eq(new singleTon());

}

return s();

2)方式2-饿汉式

新建一个新的 Scala class,name 为 TestSingleTon2,Kind为Object

//饿汉式

//看底层

/*

object TestsingleTon2 {

def main(args: Array[string]): Unit = {

val instance1 = SingleTon2 .getInstance

val instance2 = SingleTon2 .getInstance

if (instance1 == instance2) {

println("相等~~")

}

*/运行过后发现代码是相等的

object SingleTon2 {//SingleTon$

private val s: SingleTon2 = new SingleTon2

def getInstance = {

s

}

看一下底层,打开之后发现不用再先去判断是否为空再去创建,没有判断的逻辑了,核心代码为

public SinqleTon2 getIostance() {

return s() ;(直接返回,之前已经创建好了)

相关文章
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
1697 0
|
存储 Python
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
数据包络分析(Data Envelopment Analysis, DEA)详解与Python代码示例
|
3天前
|
数据采集 人工智能 安全
|
13天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1085 152
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1751 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
694 152