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

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

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

Помимо определения структуры робота, нам нужно определить «Шаблон строителя», в Golang мы можем сделать это, используя структуру, которая имеет свойство типа объекта, которым мы собираемся управлять, в этом случае, робот.

С помощью новой функции «newRobotBuilder» мы создадим построитель и будем использовать каждую из функций для установки необходимых свойств.

На следующем изображении показан код, необходимый для пошаговой установки каждого из свойств робота с помощью конструктора (строки с 30 по 58). А в строке 60 мы можем прочитать функцию «build()», которая создаст объект с конкретные значения.

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

Во-первых, давайте взглянем на строки с 65–76. Создаем двух роботов одного бойца и одного певца, как мы это делаем? вызывая newRobotBuilder, а затем мы начинаем устанавливать необходимые свойства для каждого из них.

Впереди мы могли найти вызов функции build() для создания робота.

Вывод:

Примечание. В этом примере мы просто печатаем значения свойств, но давайте представим более сложную реализацию, представляя, что вам нужно построить запрос SQL с несколькими необязательными полями и условиями, используя “ Builder Pattern” мы можем создать SQL Builder и добавить необходимые столбцы или условия, например:

“ sqlQuery := newQueryBuilder().withName().withCount().withLocation().WhereName(“someValue”).WhereLocation(“someValue”).build()”

Дополнительная информация

Узнав, как этот шаблон можно реализовать с помощью Golang, и прежде чем закончить эту статью, позвольте мне дать вам дополнительную информацию, я упомяну пару плюсов и минусов и то, как этот шаблон может быть связан с другими шаблонами.

Связь с другими моделями

  • Вы можете использовать Builder при создании сложных композитных деревьев, потому что вы можете запрограммировать шаги его построения для рекурсивной работы.
  • Вы можете комбинировать Builder с Bridge: управляющая «структура» играет роль абстракции, а разные конструкторы действуют как реализации.
  • Builder может быть реализован как часть Singleton.
  • Конструктор можно комбинировать с шаблоном Factory.

За и против

  • Вы можете строить объекты шаг за шагом, откладывать шаги построения или выполнять шаги рекурсивно.
  • Вы можете повторно использовать один и тот же код сборки при создании нескольких визуализаций продукта.
  • Помогает применять принцип единой ответственности. Вы можете изолировать сложный код сборки от бизнес-логики продукта.

  • Общая сложность кода увеличивается, поскольку шаблон требует создания нескольких новых классов.

Примечание.
Эта статья связана с серией Шаблоны проектирования в Golang, которые вы можете найти здесь
https://blog.devgenius.io/desing-patters-in-golang- 1b03de4fb89