Перейти к основному содержимому

Что это такое

Паттерн Строитель (Builder) создаёт сложный объект шаг за шагом. Вместо одного конструктора с длинным и запутанным списком аргументов строитель предлагает небольшие именованные шаги — и завершающий build(), который возвращает готовый объект.

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


Пример: собираем пиццу

Сравните PizzaBuilder("large").cheese().topping("mushrooms") с вызовом конструктора вида Pizza("large", True, ["mushrooms"]) — строитель говорит, что означает каждое значение, а необязательные части просто пропускаются.

Шаги, которые складываются в цепочку

Каждый шаг именован и необязателен: маленькая пицца (small) пропускает их все. Никакой каши из аргументов True, None, False.

Prompt
Напишите программу на Python с классом PizzaBuilder: он принимает размер, шаги cheese и topping возвращают строителя для построения цепочки, а build возвращает готовый dataclass Pizza. Соберите одну большую пиццу (large) с сыром и двумя начинками и одну простую маленькую пиццу (small) и выведите обе.
Вывод: полная программа на Python

Когда его использовать

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

Не используйте его для простых объектов — вызов с именованными аргументами, Pizza(size="large"), уже сам по себе хороший маленький строитель для простых случаев.


Плюсы и минусы

Плюсы: понятное создание объекта; необязательные части без огромных списков аргументов; объект можно проверить один раз, в build().

Минусы: ещё один класс, который нужно написать и поддерживать; излишество там, где именованные аргументы и так читаются хорошо.