Kotlin中“单一”模式方法的最佳方法

时间:2018-10-22 16:57:27

标签: android kotlin

有人可以帮助我找到在Kotlin中创建单个实例的更好方法吗?

class Bar(private val blub) {

   private lateinit var foo: FooService
   private lateinit var doo: DooService

   override fun getFooService(): FooService {
       if (!::foo.isInitialized) {
           foo = FooService(blub)
       }
       return foo
   }

    override fun getDooService(): DooService {
       if (!::doo.isInitialized) {
           doo = DooService(blub)
       }
       return doo
   }
}

编辑: 我不想一开始就初始化每个对象-应该仅在需要时才进行。

谢谢!

2 个答案:

答案 0 :(得分:2)

您的课程看起来不像单身。也许你想要这样的东西

class Bar(private val blub) {

    var foo by lazy{ FooService(blub) }
}

或者您可以将其放在伴随对象中,以使所有对象之间具有相同的实例

答案 1 :(得分:1)

如果您的FooService没有通过getter进行初始化的任何参数,则可以使用object来实现:

object FooHolder {
    val foo: FooService = FooService(...)
}

否则,您的模式似乎很好,替代方法是使用可为空的变量而不是lateinit,但它们基本上是相同的:

private var foo: FooService? = null

override fun getService(): FooService {
    if (foo == null) {
        foo = FooService(...)
    }
    return foo!!
}