在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(){}