Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к нему.
public class DatabaseConnection {
private static volatile DatabaseConnection instance;
private DatabaseConnection() {}
public static DatabaseConnection getInstance() {
if (instance == null) {
synchronized (DatabaseConnection.class) {
if (instance == null) {
instance = new DatabaseConnection();
}
}
}
return instance;
}
}Реальные кейсы
— Пул соединений с БД (HikariCP держит один менеджер пула)
— Логгер (LoggerFactory в SLF4J)
— Конфигурация приложения (Spring ApplicationContext — де-факто синглтон)
— Кэш в памяти
Подводные камни: проблемы с многопоточностью (решается через volatile + double-checked locking или enum), сложность тестирования, скрытые зависимости.
🐸 Библиотека собеса по Java
#patterns