Я прохожу Эффективную Java , и некоторые из моих вещей, которые я считаю стандартными, в книге не предлагаются, например, создание объекта, у меня сложилось впечатление, что конструкторы - лучший способделая это, и книги говорят, что мы должны использовать статические фабричные методы, я не могу назвать некоторые преимущества и недостатки, и поэтому задаю этот вопрос, вот преимущества использования.
Преимущества:
- Одним из преимуществ статических фабричных методов является то, что, в отличие от конструкторов, они имеют имена.
- A secondПреимущество статических фабричных методов заключается в том, что, в отличие от конструкторов, они не обязаны создавать новый объект при каждом их вызове.
- Третье преимущество статических фабричных методов заключается в том, что в отличие от конструкторов они могут возвращатьобъект любого подтипа их возвращаемого типа.
- Четвертое преимущество статических фабричных методов состоит в том, что они уменьшают многословность создания экземпляров параметризованного типа.
Недостатки:
- Основным недостатком предоставления только статических фабричных методов является то, что классы без открытых или защищенных конструкторов не могут быть разделены на подклассы.
- Вторым недостатком статических фабричных методов является то, что их трудно отличить от других статических методов.
Ссылка: Effective Java, Joshua Bloch, Edition 2, pg: 5-10
Я не могу понять четвертое преимущество и второе неудобство и буду признателен, если кто-то сможет объяснить эти моменты.Я также хотел бы понять, как решить, использовать ли метод Constructor или Static Factory для создания объекта.