單例設計模式
單例模式,是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱爲單例的特殊類。
通過單例模式可以保證系統中,應用該模式的類一個類只有一個實例。即一個類只有一個對象實例。
伴生對象單例(Companion Object)
每個類都可以實現一個伴生對象,它是該類的所有實例共有的對象。它將類似於Java中的靜態字段。
class App : Application() {
companion object {
lateinit var instance: App
private set
}
override fun onCreate() {
super.onCreate()
instance = this
}
}
該方法有一定的侷限性,因爲在系統調用onCreat( )方法時纔會賦值。該方法類似內部類單例模式。
內部類單例
使用內部類持有外部對象的應用,實現單例。
class Singleton private constructor( ) {
companion object {
fun getInstance(): Singleton {
return Holder.instance
}
}
private object Holder {
val instance = Singleton ( )
}
}
object 類型單例
otlin 中的單例模式可以使用一個特殊的類型object,這個 object 不是Java中所有類的父類(Object),
而是創建單例時使用的,我們都知道,Java中單例有懶漢式、餓漢式,雙重檢查鎖等幾種單例變種。
但是在Kotlin中只要object一種單例實現方式即可滿足我們的需求。
object Singleton {
}