Singleton в Kotlin

Singleton в Kotlin

Kotlin не имеет модификатора static, а это значит, что мы не можем создавать статические переменные и методы. Хорошо, а как нам тогда создать Singleton в Kotlin?

К счастью, Kotlin object может справиться с этим. Ключевое слово companion object используется для доступа к членам конкретного класса.




class MyClass { 
  companion object Factory {
    val info = "This is factory"    
    fun getMoreInfo():String { return "This is factory fun" }
  } 
}
MyClass.info             // This is factory
MyClass.getMoreInfo()    // This is factory fun

Каждая переменная или метод расположенные внутри companion object могут вызываться по имени класса (типа статических). И сейчас мы создадим класс-синглтон с использованием паттерна «ленивая загрузка»:

public class Singleton private constructor() {
    init { println("This ($this) is a singleton") }    

    private object Holder { val INSTANCE = Singleton() }

    companion object {
        val instance: Singleton by lazy { Holder.INSTANCE }
    }
    var b:String? = null
}

 

  • Приватный конструктор используется для того, чтобы гарантировать, что объект данного класса будет создан только внутри этого класса
  • Метод init будет вызван при загрузке данного класса, т. е. при первом вызове Singleton.instance
  • Holder object & lazy instance используются для создания единственного экземпляра класса

Пример использования:

var first = Singleton.instance  // This  is a singleton
                             
first.b = "hello singleton"

var second = Singleton.instance
println(second.b)        // hello singleton

Источник: Singleton in Kotlin

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *