Scala单例模式(懒汉与饿汉)

package chapter05

//单例设计模式

object Test11_Singleton {
  def main(args: Array[String]): Unit = {
    //val stu1 = new Student11("alice",20)    //因为Student11被private修饰,所以不可以直接new对象
    //stu1.showInfo()

    val student1 = Student11.getInstance()
    student1.showInfo()
    println(student1)

    val student2 = Student11.getInstance()
    student2.showInfo()
    println(student2)

  }
}

class Student11 private(val name: String, val age: Int) {
  def showInfo(): Unit = {
    println(s"name: ${name}  age: ${age}  school: ${Student11.school}")
  }
}


//饿汉模式:不管有没有直接new对象
//object Student11{
//  val school : String = "henry"
//
//  private val student : Student11 = new Student11("alice",20)
//
//  def getInstance() : Student11 = {
//    student
//  }
//
//}


//懒汉模式:先判断有没有对象,如果没有则new
object Student11 {
  val school: String = "henry"

  private var student: Student11 = _

  def getInstance(): Student11 = {
    if (student == null) {
      student = new Student11("alice", 20)
    }
    student
  }
}```



结果:
name: alice  age: 20  school: henry
chapter05.Student11@d041cf
name: alice  age: 20  school: henry
chapter05.Student11@d041cf

解析:虽然上方我们创建了两个对象的实例,student1和student2;但是她们指向同一个地址:chapter05.Student11@d041cf
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值