Ответ
Тип enum в Java является канонической и наиболее безопасной реализацией паттерна Singleton (Одиночка), а в случае нескольких элементов — Multiton (Пул синглтонов).
Почему это идеальный Singleton?
- Потокобезопасность: JVM гарантирует атомарную и потокобезопасную инициализацию элементов enum.
- Защита от рефлексии: Механизм рефлексии не позволяет создать новый экземпляр enum.
- Защита от сериализации: Сериализация и десериализация enum сохраняют единственность экземпляра.
Пример Singleton через enum:
public enum DatabaseManager {
INSTANCE;
private Connection connection;
private DatabaseManager() {
// Инициализация соединения
}
public Connection getConnection() {
return connection;
}
}
// Использование:
Connection conn = DatabaseManager.INSTANCE.getConnection();
Multiton (реализация пула синглтонов):
public enum Configuration {
DATABASE("db.properties"),
CACHE("cache.properties"),
LOGGING("log.properties");
private Properties props;
Configuration(String filename) {
// Загрузка конфигурации из файла
}
public Properties getProperties() {
return props;
}
}
// Каждый элемент (DATABASE, CACHE) — свой синглтон.