Sobes.tech
Back to questions
Junior — Middle
56

Можешь ли привести примеры различных способов реализации паттерна Singleton?

Answer from AI

sobes.tech AI

В Java паттерн Singleton можно реализовать несколькими способами:

  1. Ленивая инициализация с синхронизацией
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  1. Ленивая инициализация с двойной проверкой блокировки (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;
    }
}
  1. Инициализация при загрузке класса (eager initialization)
public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}
  1. Использование enum (рекомендуемый способ с Java 5+)
public enum Singleton {
    INSTANCE;

    public void someMethod() {
        // ...
    }
}

Этот способ гарантирует потокобезопасность и защиту от сериализации.

Каждый способ имеет свои плюсы и минусы по части потокобезопасности, производительности и простоты реализации.