Что такое шаблон построителя?
Builder — это творческий шаблон проектирования, который отделяет построение сложного объекта от его представления, так что один и тот же процесс построения может создавать разные представления.
Шаблон Builder создан для преодоления некоторых недостатков Factory Pattern и Abstract Factory Pattern, когда объект имеет много атрибутов.
Есть три основные проблемы с фабричным шаблоном и абстрактным фабричным шаблоном, когда объекты имеют много свойств:
· Слишком много аргументов для передачи из клиентской программы в класс Factory, что может быть подвержено ошибкам, потому что в большинстве случаев тип аргументов один и тот же, и со стороны клиента сложно поддерживать порядок аргументов.
· Некоторые параметры могут быть необязательными, но в шаблоне Factory мы вынуждены отправлять все параметры, а необязательные параметры необходимо отправлять как NULL.
· Если объект тяжелый и его создание сложное, то вся эта сложность будет частью классов Factory, что сбивает с толку.
Каковы преимущества шаблона Builder?
· Поддержка, устранение необходимости писать несколько конструкторов.
· Код легче читать и поддерживать, когда для создания объекта требуется количество свойств из 4 или 5 свойств.
· Уменьшить количество конструкторов, не нужно передавать нулевые значения для неиспользуемых параметров.
· Объект построен более безопасно: потому что он был создан полностью перед использованием.
· Может создавать неизменяемые объекты
Каковы недостатки шаблона Builder?
· У Builder Pattern довольно много недостатков дублирующего кода: необходимо скопировать все свойства из класса Product в класс Builder.
· Увеличение сложности кода
Какие основные компоненты в нем есть?
Продукт. Создаваемый объект имеет множество свойств.
Builder: абстрактный класс или интерфейс.
ConcreteBuilder: наследует Builder и устанавливает детали того, как создать объект. Он идентифицирует и удерживает созданный им экземпляр, а также предоставляет способ возврата ранее созданных экземпляров.
Drector:где будет вызываться Builder для создания объекта.
У нас есть следующий пример:
Продукт
Пользователь
Конструктор
Бетоносмеситель
UserBuilder
Дизайнер
У нас есть вывод кода выше:
Спасибо, что уделили мне время :D
До свидания и увидимся дальше.