什么是单例模式?
单例模式是指:保证在整个的软件系统中,某个类只能存在一个对象实例。
单例模式的应用场景
比 如 Hibernate
的 SessionFactory
,它 充 当 数 据 存 储 源 的 代 理 ,并 负 责 创 建 Session 对象. SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。Scala 的并发框架Akka
中的ActorySystem
也是如此.
根据单例实例化时间不同分为懒汉式
和恶汉式
单例模式-懒汉式
object TestSingleTon {
def main(args: Array[String]): Unit = {
val instance1 = SingleTon.getInstance
val instance2 = SingleTon.getInstance
if (instance1 == instance2) {
println("相等")
}
}
}
//将SingleTon的构造方法私有化
class SingleTon private() {}
//懒汉式
//看底层
/*
public SingleTon getInstance() {
if (s() == null) {
s_$eq(new SingleTon());
}
return s();
}
*/
object SingleTon { //SingleTon$
private var s: SingleTon = null
def getInstance = {
if (s == null) {
s = new SingleTon
}
s
}
}
单例模式-饿汉式
object TestSingleTon2 {
def main(args: Array[String]): Unit = {
val instance1 = SingleTon2.getInstance
val instance2 = SingleTon2.getInstance
if (instance1 == instance2) {
println("相等~~~")
}
}
}
//将SingleTon的构造方法私有化
class SingleTon2 private() {}
//饿汉式
//看底层
/*
public SingleTon2 getInstance() {
return s();
}
*/
object SingleTon2 { //SingleTon$
private val s: SingleTon2 = new SingleTon2
def getInstance = {
s
}
}