Просто примечание стороны о вашем строителем примере шаблона:
Ваш пример не очень вписывается в шаблон строитель: «строитель» А должен иметь функцию build()
(иногда называемый get()
или construct()
), которая возвращает новый объект целевого класса.
В вашем примере сам экземпляр, как представляется, предоставляет функции построителя (source("source")
и т. Д.). Это имеет много недостатков: объект может находиться в произвольном состоянии во время выполнения, и вам нужно приложить много усилий для проверки состояния объекта, когда другая часть программы вызывает функцию этого экземпляра. Кроме того, это нарушает открытый API вашего класса, смешивая функции экземпляра и построителя. Это делает отладку сложнее, а ваш код менее читабельным.
Если у вас есть класс LeadImporter
, вы можете создать LeadImporterBuilder
, который обеспечивает функции на самом деле построить экземпляр LeadImporter
(именно поэтому мы называем его сборки эр рисунок). Следовательно, необходимо создать LeadImporter
В современном JavaScript варианты объектов гораздо более популярны. В JAVA шаблон построителя велик, но JavaScript достаточно динамичен, чтобы не приводить в действие такую многословие. На самом деле, я могу запомнить очень мало фактических применений шаблона построителя в JavaScript.
В JAVA шаблон строителя очень распространен и отличная идея. Если вам нужно настроить многие свойства экземпляра, это намного лучше, чем вызывать конструктор с большим количеством неименованных параметров. Это также более гибко, предоставляя возможность использовать несколько аргументов varargs в разных методах построения. Кроме того, значения могут быть окончательными в экземпляре полученного класса. Другим преимуществом является то, что некоторые параметры могут быть необязательными, и гораздо удобнее не вызывать соответствующие функции builder вместо передачи null
конструктору самого класса или созданию нескольких конструкторов в зависимости от аргументов, которые вы, возможно, захотите передать.
Давайте посмотрим на эти четыре аргумента в JavaScript и альтернативные варианты объекта:
- Там нет безымянных параметров. В объекте options каждый параметр получает имя. Вместо
.source("abc")
вы можете просто использовать source: "abc"
.
- Varargs в JavaScript - это нечто совершенно простое. Но они необязательны для объекта options, потому что вы можете просто передать массив внутри объекта options. Используйте
files: [ 'a', 'b', 'c' ]
вместо files('a', 'b', 'c')
.
- Вы все еще можете сделать объекты «final» с объектом options, просто настройте их, чтобы они не были доступны для записи. Однако понятие «конечных полей» не существует в JavaScript. Не имеет значения, все же можно создать неизменяемые объекты, даже используя объект options.
- Простой: вместо того, чтобы не вызывать функцию, не передавайте опцию через объект options.
На мой взгляд, модель строитель нет преимуществ перед вариантов не приемлю - по крайней мере, в современном JavaScript.
Действительно? Я думаю, что это хороший вопрос. Не так много информации о том, когда выбрать любой шаблон. –
Я не верю, что когда-либо видел шаблон строителя в JavaScript. FWIW, ответ __Java__ на боковой панели довольно понятен, когда использовать каждый (и был также закрыт.) – Mathletics
Меня не интересует, почему для Java конкретный шаблон имеет смысл. Меня интересует подход JavaScript-программиста к этому. Javscript не требует безопасности потоков, и я не сравниваю его с шаблоном Factory. Оба подхода очень распространены. –