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) { /* ... */ }
}Другие варианты:
- Eager —
static finalполе, создаётся всегда; - Double-checked locking — нужен
volatile; synchronized getInstance()— overhead на каждом вызове.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.