В чем разница между шаблоном Builder Design и шаблоном Factory Design? - PullRequest
561 голосов
/ 16 апреля 2009

В чем разница между шаблоном проектирования Builder и шаблоном проектирования Factory?

Какой из них более выгоден и почему?

Как мне представить мои результаты в виде графика, если я хочу проверить и сравнить / сопоставить эти образцы?

Ответы [ 24 ]

0 голосов
/ 15 декабря 2016

Оба шаблона имеют одну и ту же необходимость: скрыть от некоторого клиентского кода логику построения сложного объекта. Но что делает «сложным» (или иногда усложняющим) объект? Главным образом, это связано с зависимостями, точнее состоянием объекта, состоящего из более частичных состояний. Вы можете ввести зависимости с помощью конструктора, чтобы установить начальное состояние объекта, но объекту может потребоваться много из них, некоторые будут в исходном состоянии по умолчанию (просто потому, что мы должны были узнать, что установка зависимости по умолчанию на ноль - не самый чистый способ ) и некоторый другой набор в состояние, управляемое некоторым условием. Более того, существуют свойства объекта, которые являются своего рода «забывчивыми зависимостями», но также они могут принимать необязательные состояния.

Есть два хорошо известных способа преодоления этой сложности:

  • Состав / агрегация: построить объект, построить его зависимые объекты, а затем соединить вместе. Здесь конструктор может сделать прозрачным и гибким процесс, который определяет правила, определяющие конструкцию компонента.

  • Полиморфизм: правила построения объявляются непосредственно в определении подтипа, поэтому у вас есть набор правил для каждого подтипа, и некоторые условия решают, какое из этих правил применимо для построения объекта. Завод идеально подходит для этого сценария.

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

0 голосов
/ 01 августа 2016

Фабричный шаблон позволяет сразу создавать объект, а компоновщик - прерывать процесс создания объекта. Таким образом, вы можете добавить различные функции при создании объекта.

0 голосов
/ 19 февраля 2016

Фабричный шаблон создает конкретную реализацию класса во время выполнения, то есть его основное предназначение - использовать полиморфизм, чтобы позволить подклассам решать, какой класс создавать. Это означает, что во время компиляции мы не знаем точный класс, который будет создан, в то время как шаблон Builder в основном занимается решением проблемы телескопирования конструкторов antipattern, которая возникает из-за большого количества необязательных полей класса. В паттерне компоновщика нет понятия полиморфизма, поскольку мы знаем, какой объект мы пытаемся построить во время компиляции.

Единственной общей темой этих двух шаблонов является сокрытие конструкторов и создания объектов за фабричными методами, а также метод сборки для улучшения конструкции объектов.

0 голосов
/ 06 февраля 2014

На мой взгляд Шаблон Builder используется, когда вы хотите создать объект из группы других объектов, а создание детали должно быть независимым от объекта, который вы хотите создать. Это помогает скрыть создание детали от клиента, чтобы сделать строителя и клиента независимыми. Используется для создания сложных объектов (объектов, которые могут состоять из сложных свойств)

В то время как фабричный шаблон указывает, что вы хотите создать объекты общего семейства и хотите, чтобы он был сразу зарезервирован. Используется для более простых объектов.

...