Kotlin 实现单例模式
Posted 陈蒙_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 实现单例模式相关的知识,希望对你有一定的参考价值。
Java 实现
先来回忆一下 Java 代码实现单例的一种方式:
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
更多单例模式见 单例模式。
Kotlin 实现
那 Kotlin 的单例模式如何实现呢?是不是也有好几种方式呢?
下面就是见证奇迹的时刻:
object Singleton
是的,你没有看错,就这一行代码。
下面是带入参的实现方式:
用法:
Singleton.getInstance(context).doSomething()
Singleton 和 SingletonHolder 的实现:
class Singleton private constructor(context: Context) {
init {
// do something with context
}
companion object : SingletonHolder<Singleton, Context>(::Singleton)
}
open class SingletonHolder<out T: Any, in A>(creator: (A) -> T) {
private var creator: ((A) -> T)? = creator
@Volatile private var instance: T? = null
fun getInstance(arg: A): T {
val checkInstance = instance
if (checkInstance != null) {
return checkInstance
}
return synchronized(this) {
val checkInstanceAgain = instance
if (checkInstanceAgain != null) {
checkInstanceAgain
} else {
val created = creator!!(arg)
instance = created
creator = null
created
}
}
}
}
参考文档
以上是关于Kotlin 实现单例模式的主要内容,如果未能解决你的问题,请参考以下文章