如何在 Kotlin 中创建单例类?
2022-08-03 本文已影响0人
BlueSocks
Singleton 是一个全局对象,可以从应用程序的任何地方访问。本文展示了在 Kotlin 中创建它的不同方法。
在 Kotlin 中,您可以使用对象声明来实现单例。但是,如果你不知道这个对象关键字,你可能会做这样的事情。
常规单例
class Singleton private constructor() {
companion object {
@Volatile
private lateinit var instance: Singleton
fun getInstance(): Singleton {
synchronized(this) {
if (!::instance.isInitialized) {
instance = Singleton()
}
return instance
}
}
}
fun show() {
println("This is Singleton class!")
}
}
fun run() {
Singleton.getInstance().show()
}
private constructor()
使用,因此不能像往常一样创建类@Volatile
并synchronized()
用于确保此 Singleton 创建是线程安全的。
对象声明单例
这可以简化为
object Singleton {
fun show() {
println("This is Singleton class!")
}
}
fun run() {
Singleton.show()
}
Singleton
是一个类,也是一个单例实例,您可以在其中直接从代码访问单例对象。
构造函数参数单例
此对象声明的限制是您不能将构造函数参数传递给它来创建单例对象。如果你想这样做,你仍然需要使用第一种常规方法。
class Singleton private constructor(private val name: String) {
companion object {
@Volatile
private lateinit var instance: Singleton
fun getInstance(name: String): Singleton {
synchronized(this) {
if (!::instance.isInitialized) {
instance = Singleton(name)
}
return instance
}
}
}
fun show() {
println("This is Singleton $name class!")
}
}
fun run() {
Singleton.getInstance("liang moi").show()
}
结论
我个人将单例用于简单的实用程序类(使用对象声明)和数据库(使用约定单例方法 - 因为它需要传入参数)。
链接:https://vtsen.hashnode.dev/how-to-create-singleton-class-in-kotlin#heading-conventional-singleton