scala:分別使用懶漢式和餓漢式實現單例模式

孫晨c發表於2021-02-25

在java中,單例模式需要滿足以下要求:

  • 構造方法私有化,使得本類之外的地方不能使用構造方法new出物件
  • 提供私有靜態屬性,接收單例物件
  • 公共的、靜態的getInstance方法,便於外界拿到單例物件

想了解Java單例模式的請轉到:Java單例模式-懶漢式、惡漢式、靜態內部類、列舉以及執行緒安全問題

在scala中

  • 主構造方法私有化,即類名後面加上private修飾
  • 使用類的伴生物件達到Java中的static效果,伴生物件只會載入一次
/**
  * Desc: SCALA單例設計模式
  *   -懶漢式
  *   -餓漢式
  */
object Scala16_TestSingleton {
  def main(args: Array[String]): Unit = {
    val std1: Student16 = Student16.getInstance()
    println(std1)//std1和std2輸出的地址一樣
    
    val std2: Student16 = Student16.getInstance()
    println(std2)
	
  }
}


//懶漢式
object Student16{
  private var s:Student16 = null
  def getInstance():Student16={
    if(s == null){
      s = new Student16
    }
    s
  }
}

//餓漢式
object Student16{
  private var s:Student16 = new Student16
  def getInstance():Student16={
    s
  }
}

//主構造方法私有化
class Student16 private(){}

相關文章