单例介绍:
保证整个软件系统中,某个类只能存在一个对象实例
应用场景例如:一家店的店主只能有一个;一个车的驾驶员也只能有一个;等
类别:
饿汉式:
类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
不使用时就加载到内存,占用了资源
// 测试类
object TestSingle extends App {
val boss1 = Boss.getBoss
val boss2 = Boss.getBoss
// 1355531311 1355531311
print(boss1.hashCode() + " " + boss2.hashCode()) // 哈希值相等 对象为同一个 实现了单例
}
/*
底层代码
public SingleTon getInstance() {
if (s == null) {
s_$eq(new SingleTon());
}
return s();
}
*/
class Boss private() { // Boss类的构造方法私有化
var name: String = _
println("懒汉式~~~")
}
// 懒汉式
object Boss {
private var b: Boss = null // 先赋值为null
def getBoss = {
if (b == null) { // 判断不为null 才实例化对象
b = new Boss // 在这里 实例化对象
}
b
}
}
懒汉式:
等到引用时才会被加载
// 测试类
object TestSingle extends App {
val b1 = Boss2.getBoss2
val b2 = Boss2.getBoss2
// 564160838 564160838 对象为同一个,形成了单例模式
print(b1.hashCode() + " " + b2.hashCode())
}
class Boss2 private() { // 构造方法私有化
var age: Int = _
println("饿汉式~~~")
}
// 饿汉式
object Boss2 {
private val b: Boss2 = new Boss2 // 直接实例化对象
def getBoss2 = {
b
}
}