Mediumsingleton

Что такое Singleton pattern и как реализовать в Java?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Singleton — паттерн, гарантирующий один экземпляр класса. Лучшие реализации — Bill Pugh holder (ленивый, потокобезопасный без sync) и enum singleton (Effective Java Item 3, защита от reflection/serialization).

// Bill Pugh — initialization-on-demand holder
public class Singleton {
    private Singleton() {}
    private static class Holder {
        static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance() { return Holder.INSTANCE; }
}

// Enum singleton — preferred (Effective Java Item 3)
public enum DbConnection {
    INSTANCE;
    public void query(String sql) { /* ... */ }
}

Другие варианты:

  • Eagerstatic final поле, создаётся всегда;
  • Double-checked locking — нужен volatile;
  • synchronized getInstance() — overhead на каждом вызове.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.