Приведи пример порождающего паттерна

«Приведи пример порождающего паттерна» — вопрос из категории Паттерны, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Singleton — гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.

class Singleton private constructor() {
    companion object {
        @Volatile
        private var instance: Singleton? = null

        fun getInstance(): Singleton {
            return instance ?: synchronized(this) {
                instance ?: Singleton().also { instance = it }
            }
        }
    }
}

Использование:

val singleton = Singleton.getInstance()

Плюсы:

  • Контроль доступа к единственному экземпляру.
  • Ленивая инициализация (экземпляр создаётся только при первом вызове).

Минусы:

  • Усложняет тестирование из-за глобального состояния.
  • Нарушает принцип единственной ответственности.