← Назад к вопросам

Приведи пример приватного конструктора

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
  • Защита от ошибок: Предотвращаешь неправильное использование
  • Кэширование: Можешь переиспользовать существующие экземпляры

Важно помнить

Приватный конструктор можно вызывать из других конструкторов или статических методов того же класса, а также из вложенных классов. Это мощный инструмент для контроля создания объектов и реализации важных паттернов проектирования.