Back to questions
Junior — Middle
56
Можешь ли привести примеры различных способов реализации паттерна Singleton?
Answer from AI
sobes.tech AI
В Java паттерн Singleton можно реализовать несколькими способами:
- Ленивая инициализация с синхронизацией
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
- Ленивая инициализация с двойной проверкой блокировки (Double-checked locking)
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- Инициализация при загрузке класса (eager initialization)
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- Использование enum (рекомендуемый способ с Java 5+)
public enum Singleton {
INSTANCE;
public void someMethod() {
// ...
}
}
Этот способ гарантирует потокобезопасность и защиту от сериализации.
Каждый способ имеет свои плюсы и минусы по части потокобезопасности, производительности и простоты реализации.