TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10K subscribers
Post #3618 1.74K
📌 Паттерн "Одиночка" (Singleton) – когда и как правильно использовать?

👋 Сегодня хочу поговорить о Singleton – одном из самых популярных (и часто злоупотребляемых) паттернов в Java.

🔥 Что такое Singleton?
Singleton гарантирует, что у класса будет только один экземпляр и предоставляет глобальную точку доступа к нему.

Пример классического Singleton:

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

private Singleton() {}

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

Здесь используется жадная инициализация – объект создаётся сразу при загрузке класса.

💣 Проблемы Singleton
1️⃣ Нарушение SRP (Single Responsibility Principle) – Singleton управляет своим жизненным циклом.
2️⃣ Проблемы с тестированием – сложность мокирования в юнит-тестах.
3️⃣ Глобальное состояние – сложнее поддерживать код, возможны неожиданные баги.

✅ Когда использовать Singleton?
✔ Если требуется единый точный экземпляр (например, пул соединений, логгер).
✔ Если объект дорого создавать и его состояние неизменно.
✔ Когда глобальная точка доступа действительно оправдана.

🔧 Альтернативы
👉 Dependency Injection (DI) – лучше передавать объект через конструктор.
👉 Enum Singleton – лучший способ создать потокобезопасный Singleton:

public enum SingletonEnum {
INSTANCE;

public void someMethod() {
System.out.println("Работаем!");
}
}

Он защищён от сериализации и reflection-атак! 🚀

👉@BookJava
  • 👍 10
More from @bookjava
  1. Oct 5, 2026🧠 Dependency Inversion Principle (D в SOLID) Зависимости должны идти от высокоуровневой п…
  2. Sep 30, 2026Три похожих слова в Java — final, finally, finalize — но смысл у них совершенно разный. Ра…
  3. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  4. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  5. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  6. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →