前言
单例模式(Singleton Pattern
),是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。在 Android
中,有许多系统服务和 API
使用了单例模式,比如:
Context
: 通过getApplicationContext()
获取到的进程中全局唯一Context
上下文对象。
SharedPreferences
: 通过 getSharedPreferences()获取 ,使用单例模式来管理应用程序中的持久化数据。在进程中是全局唯一的。
还有一些常用的系统服务管理类,比如WindowManager
、WifiManager
、ConnectivityManager
等等
实现
在Kotlin
中实现单例的方式比较简单,它提供了关键字object
声明单例模式,编译器会自动确保实例的唯一性和线程安全性。
object Singleton {
private const val name = "Ho"
fun showName() {
println("My name is: $name")
}
}
Singleton.showName()
正常开发中,有些功能需要在单例类中初始化,在init
代码块中进行操作即可。
object Singleton {
private const val name = "Ho"
//做初始化操作
init {
println("Singleton class invoked.")
}
fun showName() {
println("My name is: $name")
}
}
在某些情况下,我们希望实现延时加载单例,只有在第一次使用的时候再进行创建,Kotlin
中提供了by lazy
来实现懒加载。
class LazySingleton private constructor(){
private val name = "Ho"
companion object{
val instance: LazySingleton by lazy { LazySingleton() }
}
//做初始化操作
init {
println("LazySingleton class invoked.")
}
fun showName() {
println("My name is: $name")
}
}
总结
Kotlin
的单例模式通过 object
关键字实现,简洁且线程安全。对于需要懒加载的情况,可以使用 by lazy
实现。