Преимущество использования статического класса внутреннего строителя

9

В процессе написания руководств по кодированию для компании я рекомендовал использовать шаблон Builder из Effective Java вместо телескопических конструкторов.

Однако, подумав немного об этом, безусловно, более элегантным решением будет просто удалить класс построителя, а также удалить дополнительные конструкторы с необязательными аргументами.

Так что просто имейте один конструктор с необходимыми параметрами, обычные методы получения / установки и комментируйте код. При реализации просто создайте новый экземпляр объекта yr, затем установите значения.

Мое первоначальное мышление состояло в том, что вы избавились от путаницы относительно того, какие параметры являются необязательными, а какие - необходимыми; однако истинное преимущество заключается в использовании метода цепочки / свободного интерфейса.

Шаблон компоновщика имеет свои преимущества, когда вы создаете много новых экземпляров, так как ide может выполнять работу на ногах, а также при наличии множества (более 15) необязательных параметров. Однако стоит ли тратить дополнительное время на кодирование статического внутреннего класса, вы бы порекомендовали использовать компоновщик или это пустая трата времени?

ним чимпский
источник
См. Также stackoverflow.com/a/1953567/632951
Pacerier

Ответы:

8

Я склонен следовать шаблону, согласно которому конструкторы должны предоставлять все обязательные значения, необходимые для создания допустимого и согласованного объекта. Для необязательных значений я пытаюсь думать о том, каким должно быть наиболее распространенное значение по умолчанию, чтобы сеттеры использовались как можно меньше.

Если я обнаружу, что существует множество необязательных значений или что большая часть необязательных значений имеет тенденцию изменяться по сравнению с их значениями по умолчанию, то я буду использовать шаблон построителя (статический внутренний построитель или другой аналогичный дизайн).

Джош обычно дает чертовски хороший совет - лучшее, что мне нравится в нем, это то, что советы приходят из окопов, - он признает, что допустил ошибки при разработке частей Java, а Effective Java отчасти является своего рода «лекарством», так что разговаривать :-)

Мартейн Вербург
источник
1
Это ничего не говорит о том, почему внутреннее должно быть статичным ...
Джимми Хоффа
Неизменность и отсутствие побочных эффектов также является целью.
Мартейн Вербург
6

Шаблон Builder Джоша Блоха, так же как и шаблон GoF Builder, предлагает способ создания неизменяемого объекта с большим количеством данных по умолчанию без длинных списков связанных конструкторов.

Если у вас «один конструктор с необходимыми параметрами, обычные методы получения / установки», тогда ваш объект больше не является неизменным. то есть. Вы можете изменить его еще долго после его создания.

Если это не проблема для вас, вам никогда не понадобился шаблон Builder. Если это проблема, то ваше решение имеет недостатки.

прецизионный самописец
источник
Я не думаю, что шаблон компоновщика имеет какое-либо отношение к изменчивости, даже пример gof на вики изменчив ... en.wikipedia.org/wiki/Builder_pattern#Java шаблон также имеет преимущества, которые я изложил в этом вопросе.
НимЧимпский
3
@NimChimpsky: вопрос о том, можно ли применять шаблон Builder для создания изменяемого объекта, не обсуждается. Вопрос в том, должны ли вы? Геттеры и сеттеры существуют вечно, где объекты могут быть изменяемыми, и они представляют собой совершенно надежное решение, но люди сталкиваются с общей проблемой создания неизменяемых объектов: неуправляемые цепочки конструкторов. Строитель был общим решением и, таким образом, стал образцом, облегчающим общение.
фунтовые