Какой паттерн проектирования реализует Enum в Java?

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

Ответ

Тип enum в Java является канонической и наиболее безопасной реализацией паттерна Singleton (Одиночка), а в случае нескольких элементов — Multiton (Пул синглтонов).

Почему это идеальный Singleton?

  1. Потокобезопасность: JVM гарантирует атомарную и потокобезопасную инициализацию элементов enum.
  2. Защита от рефлексии: Механизм рефлексии не позволяет создать новый экземпляр enum.
  3. Защита от сериализации: Сериализация и десериализация 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) — свой синглтон.