[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-patterny-chto-takoe-pattern-singleton":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1258,"chto-takoe-pattern-singleton",40,"patterny","Паттерны","🧩","Что такое паттерн Singleton?","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа к нему.\n\n> Аналогия из жизни: Singleton -- как президент страны. В один момент времени может быть только один, и все обращаются к одному и тому же человеку.\n\n### Способы реализации\n\n| Способ | Ленивость | Потокобезопасность | Защита от reflection | Простота |\n|--------|-----------|-------------------|----------------------|----------|\n| Enum Singleton | Нет | Да | Да | Максимальная |\n| Static Holder (Bill Pugh) | Да | Да | Нет | Высокая |\n| Double-Checked Locking | Да | Да (volatile) | Нет | Средняя |\n\n\u003Cdetails>\n\u003Csummary>Примеры реализации\u003C\u002Fsummary>\n\n```java\n\u002F\u002F 1. Enum Singleton -- рекомендуемый способ (Effective Java, Joshua Bloch)\npublic enum AppConfig {\n    INSTANCE;\n\n    private final Map\u003CString, String> properties = new HashMap\u003C>();\n\n    public String get(String key) { return properties.get(key); }\n    public void set(String key, String value) { properties.put(key, value); }\n}\n\u002F\u002F Использование: AppConfig.INSTANCE.get(\"db.url\")\n\n\u002F\u002F 2. Static Holder -- ленивая инициализация, потокобезопасная\npublic class Singleton {\n    private Singleton() {}\n\n    private static class Holder {\n        static final Singleton INSTANCE = new Singleton();\n    }\n\n    public static Singleton getInstance() {\n        return Holder.INSTANCE;\n    }\n}\n\n\u002F\u002F 3. Double-Checked Locking (если нужна параметризованная инициализация)\npublic class Singleton {\n    private static volatile Singleton instance;\n\n    public static Singleton getInstance() {\n        Singleton local = instance;\n        if (local == null) {\n            synchronized (Singleton.class) {\n                local = instance;\n                if (local == null) {\n                    instance = local = new Singleton();\n                }\n            }\n        }\n        return local;\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Частые ошибки\n\n- Double-checked locking без volatile -- объект может быть частично инициализирован\n- Singleton как глобальная переменная -- если нужен глобальный доступ, возможно, нужен DI\n- Singleton в многоклассовом загрузчике -- каждый ClassLoader создаёт свой экземпляр\n\n### Как используется в 2026\n\n- Ручной Singleton редок -- Spring управляет жизненным циклом бинов\n- В Spring все бины -- singleton по умолчанию (управляемый контейнером)\n- Enum Singleton -- для утилитных объектов вне Spring-контекста\n\n> **На собеседовании:** интервьюер часто просит реализовать Singleton и объяснить потокобезопасность. Назовите Enum-вариант первым -- это покажет знание Effective Java. Частая ошибка -- забыть volatile в DCL или не упомянуть, что Spring уже решает эту задачу.","","junior",[15],"patterns",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое паттерн Singleton? — Gymterview","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа к нему.","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа",[15,13],true]