Изучение подхода Eager инициализации в шаблоне Java Singleton

В Java шаблон Singleton — это шаблон творческого проектирования, который гарантирует существование только одного экземпляра класса в приложении. Существует два распространенных подхода к реализации шаблона Singleton: быстрая инициализация и ленивая инициализация. В этой статье мы сосредоточимся на подходе активной инициализации, при котором создается экземпляр класса Singleton во время загрузки класса. Мы рассмотрим различные методы реализации быстрой инициализации в Java, а также приведем примеры кода.

Метод 1: Простая нетерпеливая инициализация
Самый простой способ реализовать нетерпеливую инициализацию — создать частный статический экземпляр класса Singleton и предоставить общедоступный статический метод для доступа к этому экземпляру.

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
        // Private constructor to prevent instantiation
    }

    public static Singleton getInstance() {
        return instance;
    }
}

Метод 2: использование статического блока
Другой метод достижения быстрой инициализации — использование статического блока для создания экземпляра класса Singleton. Такой подход позволяет нам выполнять дополнительные операции во время создания экземпляра.

public class Singleton {
    private static final Singleton instance;

    static {
        try {
            instance = new Singleton();
            // Additional operations can be performed here
        } catch (Exception e) {
            throw new RuntimeException("Failed to create singleton instance");
        }
    }

    private Singleton() {
        // Private constructor to prevent instantiation
    }

    public static Singleton getInstance() {
        return instance;
    }
}

Метод 3: Enum Singleton
Java обеспечивает поддержку на уровне языка для реализации синглтонов с использованием перечислений. Одиночные элементы перечисления по своей сути потокобезопасны и обеспечивают гарантии сериализации.

public enum Singleton {
    INSTANCE;

    // Additional methods and variables can be added here
}

Метод 4: Идиома инициализации держателя по требованию
Идиома инициализации держателя по требованию (IODH) — это потокобезопасный метод, который откладывает инициализацию экземпляра Singleton до тех пор, пока к нему не будет осуществлен первый доступ.

public class Singleton {
    private Singleton() {
        // Private constructor to prevent instantiation
    }

    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

Подход нетерпеливой инициализации в шаблоне Java Singleton обеспечивает простой способ гарантировать существование только одного экземпляра класса. Мы рассмотрели несколько методов реализации быстрой инициализации, включая простой подход с использованием статического блока, перечислений и идиому инициализации держателя по требованию. В зависимости от требований вашего приложения вы можете выбрать наиболее подходящий метод реализации паттерна Singleton.