Существует ли какой-либо шаблон проектирования, который позволяет только определенному классу создавать другой конкретный класс

#java #design-patterns #inner-classes

#java #шаблоны проектирования #внутренние классы

Вопрос:

без использования внутреннего класса

я хочу, чтобы только класс A имел право на новый класс B, но я не хочу использовать внутренний класс, поскольку в другом классе есть массив класса A, который я не могу изменить

Существует другой класс, содержащий ссылку на массив класса B, который вызовет ошибку, когда я изменяю класс B на InnerClass, поскольку пространство имен изменяется. я не могу изменить этот класс

Комментарии:

1. Частный внутренний класс — правильный способ сделать это. Почему вы не хотите использовать внутренний класс?

2. Я думаю, что «единственный» способ сделать это — с помощью внутреннего класса. Однако, если вы используете модификатор ‘friendly’ в своем конструкторе, вы могли бы создать фабрику в том же пакете, что и ваш класс, и использовать фабрику для создания экземпляров вашего класса.

3. Пожалуйста, опишите, почему вы хотите это сделать. Возможно, есть лучшее решение вашей проблемы.

Ответ №1:

Если классы A и B являются единственными классами в одном пакете, то создание конструктора пакета Class B private достигнет того, чего вы хотите.

Типичный способ контролировать построение — сделать конструктор B закрытым и добавить статический фабричный метод, возможно, тот, который принимает экземпляр A?

Изменение B на интерфейс и создание внутренних классов, которые реализуют B, является другим вариантом.