#java #constructor #factory-method
#java #конструктор #factory-метод
Вопрос:
У меня есть абстрактный класс, AbstractClass
который в конечном итоге объединяет большое количество final
конкретных классов A
и B
т. C
Д. «В конечном счете», как и в некоторых случаях, существует промежуточный абстрактный класс — D1
и D2
оба расширяются AbstractD
, который расширяется AbstractClass
, например. Во время создания объекта каждый из этих конкретных классов должен быть связан с одним (и только одним) экземпляром одного из конкретных классов: возможно, того же класса, возможно, другого. Каждый конкретный класс также имеет большое количество конструкторов.
Кодирование этого как:
public A(String aVariable, int anotherVariable, AbstractClass objectToBeLinked){
//do some stuff with other variables;
owner = objectToBeLinked;
objectToBeLinked.addToInventory(this);
}
и затем другие подписи конструктора по мере необходимости дадут мне некоторое Leaking this in Constructor
время, я понимаю, что это не обязательно недостаток, я хотел бы избежать этого — для безопасности потоков, а также просто для использования лучших практик. Лучшее решение, которое я вижу, — это реализовать какую-то форму фабричного метода:
public static void createObjectA(String aVariable, int anotherVariable, AbstractClass objectToBeLinked){
a = new A(String aVariable, int anotherVariable, AbstractClass objectToBeLinked);
objectToBeLinked.addToInventory(a);
}
(например, реализация, очевидно, может отличаться), чтобы гарантировать, что создание объекта завершено до того, как оно будет связано. Однако, учитывая большое количество конкретных классов и большое количество конструкторов, которые есть у каждого, это означало бы создание огромного количества фабричных методов. Если это лучшее решение, то пусть будет так, но мне интересно, есть ли лучший метод, которого я не вижу.
Комментарии:
1. Не используйте ctor, используйте шаблон
static
factory. Как и предполагалось. Если у вас много ctors с разными параметрами; замените шаблоном builder.