如何写出好用的单例基类(kotlin)

59 阅读1分钟

如何写出好用的单例基类呢?

语言: 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