scala伴生对象-单例模式

 
1.伴生对象
package com.deng.scala

object Test1 {
  def main(args: Array[String]): Unit = {
    val  s1 = Student.newObj("ling",23)
    val  s2 = Student("ling",23)
    println(s1)
    println(s2)
  }
}

// 定义类
class Student(var name:String,var age:Int){
  def printInfo():Unit={
    println(s"name=$name,age=$age")
  }

}

// 伴生对象
object Student {

  def newObj(name:String,age:Int):Student=new Student(name,age)
  def apply(name:String,age:Int):Student=new Student(name,age)


}

2.伴生对象-单例模式

package com.deng.scala
object Test {
  def main(args: Array[String]): Unit = {
    val  s1 = Singleton.getInstance()
    val  s2 = Singleton.getInstance()
    println(s1)
    println(s2)
  }
}

// 定义类
class Singleton(var name:String,var age:Int){

  def printInfo():Unit={

    println(s"name=$name,age=$age,shcool=${Singleton.shcool}")

  }

}
// 伴生对象
/*
* 该类可以直接方法该伴生对象中的私有成员和方法
* */

// 饿汉式单例模式
//object Singleton {
//  val shcool:String="beida"
//  private val obj:Singleton= new Singleton("ling",age=23)
//  def getInstance():Singleton=obj
//}

// 懒汉式单例模式
object Singleton {
//  val shcool:String="beida"
  private var obj:Singleton= _
  def getInstance():Singleton={
    if (obj==null) {
      obj=new Singleton("ling",age=23)
    }
    obj
  }

}

 

posted @ 2021-12-28 08:29  冰底熊  阅读(58)  评论(0)    收藏  举报