← Назад к вопросам
Приведи пример приватного конструктора
2.3 Middle🔥 91 комментариев
#SOLID и паттерны проектирования#ООП
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Приватный конструктор в Java
Приватный конструктор — это конструктор с модификатором доступа private, который не позволяет создавать экземпляры класса извне. Это один из важных паттернов проектирования.
Основной пример
public class Singleton {
private static Singleton instance;
// Приватный конструктор
private Singleton() {
System.out.println("Singleton создан");
}
// Статический метод для получения единственного экземпляра
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Использование
// ✅ Правильно
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2); // true
// ❌ Ошибка компиляции
// Singleton obj = new Singleton(); // Constructor Singleton in class Singleton cannot be applied
Примеры использования приватных конструкторов
1. Singleton паттерн
Гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к нему.
2. Factory методы
public class Database {
private Database() {} // Приватный конструктор
public static Database connect(String url) {
// Логика создания и инициализации
return new Database();
}
}
3. Утилитарные классы
public class MathUtils {
private MathUtils() {} // Предотвращает создание экземпляра
public static int add(int a, int b) {
return a + b;
}
public static int multiply(int a, int b) {
return a * b;
}
}
4. Паттерн Builder
public class User {
private String name;
private String email;
private User(String name, String email) {
this.name = name;
this.email = email;
}
public static class Builder {
private String name;
private String email;
public Builder withName(String name) {
this.name = name;
return this;
}
public Builder withEmail(String email) {
this.email = email;
return this;
}
public User build() {
return new User(name, email);
}
}
}
// Использование
User user = new User.Builder()
.withName("John")
.withEmail("john@example.com")
.build();
Современный подход: Java records
В Java 16+ для immutable объектов часто используются records с компактным конструктором:
public record Point(int x, int y) {
public Point {
if (x < 0 || y < 0) throw new IllegalArgumentException("Coordinates must be positive");
}
}
Преимущества
- Контроль инстанциирования: Контролируешь, как создаются объекты
- Реализация паттернов: Singleton, Factory, Builder
- Защита от ошибок: Предотвращаешь неправильное использование
- Кэширование: Можешь переиспользовать существующие экземпляры
Важно помнить
Приватный конструктор можно вызывать из других конструкторов или статических методов того же класса, а также из вложенных классов. Это мощный инструмент для контроля создания объектов и реализации важных паттернов проектирования.