Быстрый вопрос по Java:Создание экземпляра данного класса только из другого?

StackOverflow https://stackoverflow.com/questions/405826

  •  03-07-2019
  •  | 
  •  

Вопрос

Таким образом, моя проблема заключается в следующем:Мне нужен способ гарантировать, что только один данный класс может создавать экземпляр другого.Я не хочу делать другой вложенный внутренний класс или что-то в этом роде.Как мне это сделать?Я навскидку забываю.

Это было полезно?

Решение

Сделайте конструктор приватным.Создайте статический фабричный метод, который принимает экземпляр класса, к которому разрешен доступ.Попросите фабричный метод создать подходящий объект и использовать параметр settor для объекта, которому разрешен доступ к созданному объекту, чтобы предоставить этому классу созданную копию.

public class AllowedAccess
{
    private SecureClass secure;
    public setSecureClass( SecureClass secure )
    {
        this.secure = secure;
    }

    ...
}

public class SecureClass
{
     private SecureClass() {}

     public static void Create( AllowedAccess allowed )
     {
          allowed.setSecureClass( new SecureClass() );
     }

     ...
}

Кстати, я с подозрением отношусь к этому дизайну.Мне кажется, что они слишком тесно связаны.

Другие советы

Частный статический внутренний класс - это именно то, что вам нужно.В этом нет ничего глупого.

public class Creator {
  private static class Created {
  }
}

В противном случае вы можете защитить создание экземпляра только на уровне пакета.

public class Created {
  Created() {
  }
}

Который предоставляет доступ к конструктору только классам из одного и того же пакета.

Вы могли бы сделать класс, который должен быть защищен от пакета создания экземпляра, закрытым.

Я согласен с ответом тванфоссона, а также с его комментарием о слишком высокой связи.Почему бы вам не сохранить больший контроль над процессом создания вашего класса, приняв Инверсия управления фреймворк, подобный Весна или Угадай?

ИМХО, следует немного подумать о создании классов с помощью оператора "new"...устаревшие, следует отдавать предпочтение фабрикам, а фреймворки IoC - еще больше.

С уважением

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top