Какие преимущества и недостатки у паттерна Singleton?

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

Ответ

Преимущества:

  • Глобальная доступность — единая точка доступа к экземпляру из любой части программы.
  • Контроль создания — гарантирует существование только одного экземпляра класса.
  • Ленивая инициализация — объект создается только при первом обращении (при реализации через static let).
  • Управление общими ресурсами — удобен для сервисов вроде NetworkManager или AppSettings.

Недостатки:

  • Нарушение DIP — создает скрытые зависимости, усложняя соблюдение принципа инверсии зависимостей.
  • Сложность тестирования — глобальное состояние затрудняет изоляцию модулей в unit-тестах.
  • Скрытые связи — зависимости на синглтон неявны, что ухудшает читаемость и поддерживаемость кода.
  • Потокобезопасность — требует дополнительной синхронизации при небезопасной реализации.

Пример реализации в Swift:

class AppSettings {
    static let shared = AppSettings()
    private init() {}

    var themeColor: UIColor = .systemBlue
}

// Использование:
AppSettings.shared.themeColor = .red

Рекомендация: Используйте Dependency Injection для передачи зависимостей, чтобы избежать проблем, связанных с глобальным состоянием.