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

Сега ще ви покажа как можем да го приложим с Golang. В следващия пример ще изградим два обекта-робот, като за всеки от тях ще зададем необходимите свойства, като използваме шаблона за изграждане.

В изображението по-горе дефинираме тип структура за робота, който искаме да създадем. Той съдържа тип, автономия и пет „незадължителни“ свойства, които ще ни помогнат да управляваме различни поведения на обекти.

Освен да дефинираме структурата на робота, ние трябва да дефинираме „Builder Pattern“, в 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: директорът „struct“ играе ролята на абстракция, докато различните конструктори действат като имплементации.
  • Builder може да бъде внедрен като част от Singleton.
  • Конструкторът може да се комбинира с модела Factory.

Предимства и недостатъци

  • Можете да изграждате обекти стъпка по стъпка, да отлагате строителни стъпки или да изпълнявате стъпки рекурсивно.
  • Можете да използвате повторно един и същ код за изграждане, когато създавате множество изобразявания на продукти.
  • Помага за прилагането на принципа на единната отговорност. Можете да изолирате сложен код за изграждане от бизнес логиката на продукта.

  • Цялостната сложност на кода се увеличава, тъй като шаблонът изисква създаването на няколко нови класа.

Забележка:
Тази статия е свързана със серията „Desing Patters in Golang“, която можете да намерите в списъка тук
https://blog.devgenius.io/desing-patters-in-golang- 1b03de4fb89