Приведи пример реализации паттерна Singleton

Ответ

object Singleton {
    init {
        println("Singleton initialized")
    }

    fun doSomething() {
        println("Doing something")
    }
}

// Использование:
Singleton.doSomething()

Ключевые моменты:

  • object в Kotlin автоматически создает thread-safe синглтон с ленивой инициализацией
  • Инициализация происходит при первом обращении
  • Доступ к методам через имя объекта (Singleton.method())
  • Для Java-совместимости можно добавить @JvmStatic аннотации

Ответ 18+ 🔞

А, ну это же классика, ебать мои старые костыли! Смотри, тут про синглтон в Kotlin. Ёпта, это же просто пиздец как удобно, по сравнению с тем, как мы раньше в Java городили.

Вот смотри на этот код. Видишь ключевое слово object? Это оно и есть, вся магия. Ты просто пишешь object Singleton — и всё, хуй с горы, у тебя уже готовый синглтон, который сам себя создаст, когда понадобится. Никаких тебе getInstance(), никаких synchronized, никаких проверок на null. Всё за тебя компилятор сделает, красота же!

Инициализация у него ленивая, то есть пока ты к нему не обратишься, он и не создастся. Как только первый раз вызовешь Singleton.doSomething() — вот тогда и сработает этот блок init, который ты видишь. Напечатает "Singleton initialized" и всё, объект готов. И главное — потокобезопасно! То есть можешь хоть из двадцати потоков дергать, он создастся только один раз, без всяких гонок. Доверия ебать ноль, но тут реально работает.

Дальше просто пользуешься, как будто это глобальная переменная: Singleton.doSomething(). Хуй в пальто, да и только! Всё настолько просто, что даже подозрение ебать чувствую — где же подвох? А его нет.

Ну и если вдруг тебе надо с Java кодом взаимодействовать, там из Java этот object выглядит не очень удобно. Но и тут придумали: можно над методами аннотацию @JvmStatic навесить, и из Java можно будет вызывать как статический метод. В общем, продумали всё, суки.

Вот честно, после такого как будто на дворе 2002-й год и ты городишь в Java свой синглтон с двойной проверкой — просто волнение ебать, как же мы раньше жили. В Kotlin это одна строчка, ёперный театр. Красота.