Ответ
Singleton — это порождающий паттерн проектирования, который гарантирует, что у класса существует только один экземпляр, и предоставляет глобальную точку доступа к нему.
Во Flutter/Dart Singleton часто используется для сервисов, менеджеров или клиентов (например, API-клиент, кэш, настройки приложения, логгер), где необходимо централизованное управление состоянием или ресурсами.
Классическая реализация на Dart:
class DatabaseConnection {
// Статическая приватная переменная, хранящая единственный экземпляр
static final DatabaseConnection _instance = DatabaseConnection._internal();
// Фабричный конструктор, возвращающий единственный экземпляр
factory DatabaseConnection() {
return _instance;
}
// Приватный внутренний конструктор
DatabaseConnection._internal() {
// Инициализация подключения к базе данных
print('Database connection established');
}
// Пример метода
Future<void> query(String sql) async {
// ... выполнение запроса
}
}
void main() {
var db1 = DatabaseConnection();
var db2 = DatabaseConnection();
print(identical(db1, db2)); // true — это один и тот же объект
}
Важные замечания для Flutter:
- Ленивая инициализация: В приведённом примере экземпляр создаётся при первом обращении к
DatabaseConnection()благодаря тому, как Dart инициализирует статические поля. - Альтернативы для управления зависимостями: В больших Flutter-приложениях вместо чистого Singleton часто используют пакеты для внедрения зависимостей (
get_it,provider,riverpod), которые предоставляют более контролируемый и тестируемый способ иметь единственный экземпляр объекта в определённой области видимости. - Тестирование: Классический Singleton может усложнять модульное тестирование из-за глобального состояния. Использование интерфейсов и внедрение зависимостей через конструктор предпочтительнее для тестируемости.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶