一、基本介绍
1、什么是单例模式
单例模式是指:保证在整个的软件系统中,某个类只能存在一个对象实例。
2、单例模式的应用场景
比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不
是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这时就会使用到单例模式。
Akka [ActorySystem 单例]
3、单例模式的应用案例
Scala中没有静态的概念,所以为了实现Java中单例模式的功能,可以直接采用类对象(即伴生对象)方式
构建单例对象。
示例代码:
package com.lj.akka.singleton
/**
* @author Administrator
* @create 2020-03-27
*/
object SingleTonTest01 extends App {
// 懒汉式使用测试
val s1_01 = SingleTon.getInstance
val s1_02 = SingleTon.getInstance
// 可以看出两个hashCode()值是一样的,是同一个对象
println(s1_01.hashCode() + " - " + s1_02.hashCode()) // 1720435669 - 1720435669
//饿汉式使用测试
val s2_01 = SingleTon02.getInstance
val s2_02 = SingleTon02.getInstance
// 可以看出两个hashCode()值是一样的,是同一个对象
println(s2_01.hashCode() + " - " + s2_02.hashCode()) // 1595953398 - 1595953398
println(s2_01 == s2_02) // true
}
// 方式1:懒汉式(顾名思义,创建对象之前先判断是否为空,为空才创建对象!)
// 将SingleTon的构造方法私有化
class SingleTon private() {
}
object SingleTon {
private var s: SingleTon = null
def getInstance = {
if (s == null) {
s = new SingleTon
}
s
}
}
// 方式2:饿汉式(顾名思义,不管这个对象有没有上来就创建这个对象!)
// 将SingleTon02的构造方法私有化
class SingleTon02 private() {
println("~~~~")
}
object SingleTon02 {
private val s: SingleTon02 = new SingleTon02
def getInstance = {
s
}
}
对以前的知识回顾,加深基础知识!
学习来自:北京尚硅谷韩顺平老师—尚硅谷大数据技术之Scala
每天进步一点点,也许某一天你也会变得那么渺小!!!