Я недавно работал над публичным API и мучался по поводу выбора статических методов фабрики вместо конструктора. Статические фабричные методы определенно имеют смысл в некоторых случаях, но в других это не так ясно, и я не уверен, является ли согласованность с остальным API достаточной причиной для включения их в конструкторы.
В любом случае, я наткнулся на цитату из интервью Билла-Веннерса с Джошем Блохом , которая мне показалась полезной:
Когда вы пишете класс, вы можете
беги по списку моей книги
Преимущества статических фабрик над
общественные конструкторы. Если вы найдете это
значительное количество тех
преимущества на самом деле применяются в вашем
случай, то вы должны пойти с
статические фабрики. В противном случае вы должны
идти с конструкторами.
Некоторые люди были разочарованы тем, что нашли
этот совет в моей книге. Они читают это
и сказал: «Вы так сильно спорили
для общественных статических заводов, которые мы
следует просто использовать их по умолчанию. "Я
думаю, что единственный реальный недостаток в
делает так, что это немного
сбивает с толку людей, которые используются
чтобы использовать конструкторы для создания их
объекты. И я предполагаю, что это обеспечивает
немного меньше визуального сигнала в
программа. (Вы не видите новый
Ключевое слово.) И еще немного
трудно найти статические заводы в
документация, потому что Javadoc
группирует все конструкторы вместе.
Но я бы сказал, что каждый должен
рассмотреть статические фабрики все
время, и использовать их, когда они
необходимо.
Прочитав эту цитату и исследование, которое Ури упомянул *, я склонен ошибаться в пользу конструкторов, если нет веских причин поступить иначе. Я думаю, что статический фабричный метод без уважительной причины, вероятно, просто ненужная сложность и чрезмерная инженерия. Хотя я вполне могу изменить свое мнение к завтрашнему дню ...
* К сожалению, это исследование было сосредоточено не столько на статических фабричных методах, сколько на фабричном шаблоне (где существует отдельный фабричный объект для создания новых экземпляров), поэтому я не уверен, что можно сделать вывод, что статические фабричные методы путают многие программисты. Хотя в ходе исследования у меня сложилось впечатление, что они часто будут.