Шаблон «строитель» — это шаблон проектирования , предназначенный для обеспечения гибкого решения различных проблем создания объектов в объектно-ориентированном программировании . Цель шаблона проектирования «Построитель» — отделить построение сложного объекта от его представления. Это один из шаблонов проектирования «Банды четырех» .
Шаблон проектирования Builder — это один из шаблонов проектирования [1] , который описывает, как решать повторяющиеся проблемы проектирования в объектно-ориентированном программном обеспечении.
Шаблон проектирования Builder решает такие проблемы, как: [2]
Создание и сборка частей сложного объекта непосредственно внутри класса не является гибкой. Он обязывает класс создать конкретное представление сложного объекта и делает невозможным последующее изменение представления независимо от класса (без необходимости изменения).
Шаблон проектирования Builder описывает, как решать такие проблемы:
Builder
объект.Builder
вместо того, чтобы создавать объекты напрямую.Класс (один и тот же процесс построения) может делегировать разные Builder
объекты для создания разных представлений сложного объекта.
Целью шаблона проектирования Builder является отделение конструкции сложного объекта от его представления. Таким образом, один и тот же процесс построения может создавать разные представления. [1]
Преимущества шаблона Builder включают в себя: [3]
К недостаткам шаблона Builder относятся: [3]
На приведенной выше диаграмме классов UML класс не создает и не собирает объекты and напрямую. Вместо этого термин относится к интерфейсу для построения (создания и сборки) частей сложного объекта, что делает независимость от того, какие конкретные классы создаются (какое представление создается). Класс реализует интерфейс путем создания и сборки объектов и .
Диаграмма последовательности UML показывает взаимодействия во время выполнения: объект вызывает объект , который создает и собирает объект. После этого вызывается , который создает и собирает объект.Director
ProductA1
ProductB1
Director
Builder
Director
Builder1
Builder
ProductA1
ProductB1
Director
buildPartA()
Builder1
ProductA1
Director
buildPartB()
Builder1
ProductB1
Пример С # :
/// <summary> /// Представляет продукт, созданный разработчиком. /// </summary> public class Bicycle { public Bicycle ( string make , string model , string color , int height ) { Make = make ; Модель = модель ; Цвет = цвет ; Высота = высота ; } общедоступная строка Make { get ; набор ; } Публичная строка Модель { получить ; набор ; } Общественный ИНТ Высота { получить ; набор ; } Публичная строка Цвет { получить ; набор ; } } /// <summary> /// Абстракция строителя. /// </summary> публичный интерфейс IBicycleBuilder { Bicycle GetResult (); строка Цвет { получить ; набор ; } Int Высота { получить ; набор ; } } /// <summary> /// Реализация конструктора бетона. /// </summary> public class GTBuilder : IBicycleBuilder { public Bicycle GetResult () { return Height == 29 ? новый велосипед ( «GT» , «Лавина» , Цвет , Высота ) : null ; } публичная строка Цвет { получить ; набор ; } Общественный ИНТ Высота { получить ; набор ; } } /// <сводка> /// Режиссер. /// </summary> общественный класс MountainBikeBuildDirector { частный IBicycleBuilder _builder ; общественный MountainBikeBuildDirector ( строитель IBicycleBuilder ) { _builder = строитель ; } общественный недействительный Construct () { _builder . Цвет = «Красный» ; _строитель . Высота = 29 ; } общественный велосипед GetResult () { верните это . _строитель . ПолучитьРезультат (); } } общественный класс Client { общественный недействительный DoSomethingWithBicycles () { вар директор = новый MountainBikeBuildDirector ( новый GTBuilder ()); // Директор контролирует поэтапное создание продукта и возвращает результат. директор . Построить (); Велосипед myMountainBike = директор . ПолучитьРезультат (); } }
Режиссер собирает экземпляр велосипеда в приведенном выше примере, делегируя сборку отдельному объекту-строителю, который был передан Директору Клиентом.
{{cite book}}
: CS1 maint: multiple names: authors list (link)