Ответ
Singleton (Одиночка) — это порождающий паттерн проектирования, который гарантирует, что у класса существует только один экземпляр, и предоставляет к нему глобальную точку доступа.
Основная цель: централизованное управление общим ресурсом или сервисом (например, сетевым менеджером, менеджером данных или настройками).
Пример реализации в Swift:
class NetworkManager {
// Единственный общий экземпляр
static let shared = NetworkManager()
// Приватный инициализатор предотвращает создание новых экземпляров извне
private init() {}
func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
// Сетевая логика...
}
}
// Использование:
NetworkManager.shared.fetchData { result in
// Обработка результата
}
Ключевые особенности и best practices:
- Потокобезопасность: В Swift инициализация
static letявляется атомарной и потокобезопасной по умолчанию. - Тестируемость: Singleton усложняет модульное тестирование из-за глобального состояния. Рекомендуется использовать протоколы и dependency injection для замены синглтона на мок в тестах.
- Применение: Используйте осознанно, только когда действительно необходим строго один экземпляр на всё приложение. Часто предпочтительнее передавать зависимости явно.