Ответ
Приватный конструктор используется, чтобы запретить создание экземпляров класса напрямую через оператор new. Основные сценарии применения:
- Классы-утилиты (Utility/Helper classes): Классы, содержащие только статические методы.
- Реализация паттерна Singleton: Гарантия единственного экземпляра класса.
- Паттерн Factory Method: Создание объектов через статический фабричный метод.
- Классы-заполнители для статических констант.
Пример 1: Класс-утилита (наиболее частый случай)
public class MathUtils {
// Приватный конструктор предотвращает инстанцирование
private MathUtils() {
throw new AssertionError("Utility class should not be instantiated");
}
// Только статические методы
public static int add(int a, int b) {
return a + b;
}
public static double circleArea(double radius) {
return Math.PI * radius * radius;
}
}
// Использование:
// int sum = MathUtils.add(5, 3); // Правильно
// MathUtils utils = new MathUtils(); // Ошибка компиляции!
Пример 2: Реализация Singleton (с ленивой инициализацией)
public class DatabaseConnection {
private static DatabaseConnection instance;
private String connectionString;
// Приватный конструктор
private DatabaseConnection() {
this.connectionString = "jdbc:mysql://localhost/mydb";
// Инициализация соединения...
}
// Публичный статический метод для получения единственного экземпляра
public static synchronized DatabaseConnection getInstance() {
if (instance == null) {
instance = new DatabaseConnection();
}
return instance;
}
public void connect() { /* ... */ }
}
// Использование:
DatabaseConnection conn = DatabaseConnection.getInstance();
conn.connect();
Вывод: Приватный конструктор — это инструмент контроля над процессом создания объектов, важный для архитектурных паттернов и обеспечения целостности программы.