如何写出好用的单例基类呢?
语言: Kotlin
1.一个构造函数参数的单例
abstract class BaseSingleton<in P, out T> {
@Volatile
private var INSTANCE: T? = null
protected abstract val creator: (P) -> T
fun getInstance(param: P): T {
return INSTANCE ?: synchronized(this) {
INSTANCE ?: creator(param).also { INSTANCE = it }
}
}
}
2.无构造函数参数的单例
abstract class BaseEmptySingleton<out T> {
@Volatile
private var INSTANCE: T? = null
protected abstract val creator: () -> T
fun getInstance(): T {
return INSTANCE ?: synchronized(this) {
INSTANCE ?: creator().also { INSTANCE = it }
}
}
}
代码也是很简单的,我就不解释了,以上的代码没有任何一句废话。
如何使用呢?
SingleParamClass.getInstance(context)
class SingleParamClass private constructor(val context: Context) {
companion object : BaseSingleton<Context, SingleParamClass>() {
override val creator: (Context) -> SingleParamClass
get() = { SingleParamClass(it) }
}
}
NoParamClass.getInstance()
class NoParamClass private constructor() {
companion object : BaseEmptySingleton<NoParamClass>() {
override val creator: () -> NoParamClass
get() = { NoParamClass() }
}
}
OVER