В примерах, которые вы показываете, шаблон должен скрывать вызов конструктора за фабричным методом.
Это очень хорошо зарекомендовавший себя метод, позволяющий реализации быть гибкой в том, какую реализацию она будет выполнять. на самом деле вернуться. Это позволяет инкапсулировать как сложную логику c, так и будущую эволюцию. Даже если это не относится к приведенным вами примерам, также возможно вообще не создавать новые экземпляры, а возвращать объединенные или кэшированные копии (как Integer.valueOf
, а не new Integer
).
Если вы напрямую вызываете конструктор, то невозможно достичь такой гибкости.
Меньше кода для записи, поскольку nio предоставляет полезные методы (например, newBufferedReader) непосредственно в классе. но это можно было бы сделать и в методах экземпляра, чтобы вам не пришлось передавать путь в качестве параметра.
Что-то вроде path.newBufferedReader()
, вероятно, слишком сильная связь между этими классами. Они хотят, чтобы Path
был классом, представляющим путь к файловой системе. Ему не нужно знать все, что люди могут захотеть делать с файлами. Фокусированные и независимые классы помогают с модульностью.
Для более старых API, где они пошли другим путем, посмотрите на String#replaceAll
. Здесь вся логика c понимания регулярных выражений была интегрирована в класс String
.