Код A взят из проекта android / архитектура-компоненты-образцы .
Автор помещает код экземпляра класса DefaultServiceLocator
в interface ServiceLocator
.
На мой взгляд, обычно интерфейс не должен включать какой-либо реализуемый код.
Это хорошая идея, чтобы поместить код экземпляра класса в интерфейс в Kotlin?
Код A
interface ServiceLocator {
companion object {
private val LOCK = Any()
private var instance: ServiceLocator? = null
fun instance(context: Context): ServiceLocator {
synchronized(LOCK) {
if (instance == null) {
instance = DefaultServiceLocator(
app = context.applicationContext as Application,
useInMemoryDb = false)
}
return instance!!
}
}
/**
* Allows tests to replace the default implementations.
*/
@VisibleForTesting
fun swap(locator: ServiceLocator) {
instance = locator
}
}
...
}
open class DefaultServiceLocator(val app: Application, val useInMemoryDb: Boolean) : ServiceLocator {
...
}