scala:分別使用懶漢式和餓漢式實現單例模式
阿新 • • 發佈:2021-02-25
# 在java中,單例模式需要滿足以下要求:
- 構造方法私有化,使得本類之外的地方不能使用構造方法new出物件
- 提供私有==靜態屬性==,接收單例物件
- 公共的、==靜態的getInstance方法==,便於外界拿到單例物件
想了解Java單例模式的請轉到:[Java單例模式-懶漢式、惡漢式、靜態內部類、列舉以及執行緒安全問題](https://blog.csdn.net/DTFT_/article/details/105110094?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161418535516780271579961%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161418535516780271579961&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-105110094.pc_v1_rank_blog_v1&utm_term=%E5%8D%95%E4%BE%8B&spm=1018.2226.3001.4450)
# 在scala中
- 主構造方法私有化,即類名後面加上`private`修飾
- 使用類的伴生物件達到Java中的static效果,伴生物件只會載入一次
```scala
/**
* 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(