Урок 3. Строитель (Builder)
Паттерн "Строитель" (Builder) — это порождающий паттерн проектирования, который используется для создания сложных объектов. Он позволяет создавать объекты поэтапно, отделяя процесс создания объекта от его представления. Это особенно полезно, когда объект имеет множество параметров или когда необходимо создать различные представления одного и того же объекта. Основные концепции
Продукт:
Продукт — это сложный объект, который мы хотим создать. Он может состоять из множества компонентов и параметров.
Строитель:
Строитель определяет интерфейс для создания частей продукта. Он может иметь методы для добавления различных компонентов и настройки параметров.
Конкретный строитель:
Конкретный строитель реализует интерфейс строителя и отвечает за создание конкретного представления продукта.
Директор:
Директор управляет процессом создания объекта. Он использует строителя для создания продукта, но не знает о конкретных деталях его реализации.
Преимущества использования паттерна "Строитель"
Читаемость кода: Код становится более понятным, так как процесс создания объекта разделен на логические шаги.
Гибкость: Легко изменять процесс создания объекта, добавляя или изменяя шаги.
Упрощение создания сложных объектов: Позволяет создавать объекты с множеством параметров без необходимости передавать их все в конструктор.
Пример использования
Рассмотрим пример, где мы создаем объект Pizza, который имеет различные параметры, такие как размер, тип теста, соусы и начинки. Мы создадим строителя для поэтапного создания объекта Pizza.
// Продукт
class Pizza {
private String size;
private String dough;
private String sauce;
private String topping;
public void setSize(String size) {
this.size = size;
}
public void setDough(String dough) {
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void setTopping(String topping) {
this.topping = topping;
}
@Override
public String toString() {
return "Pizza [size=" + size + ", dough=" + dough + ", sauce=" + sauce + ", topping=" + topping + "]";
}
}
// Строитель
interface PizzaBuilder {
void buildSize();
void buildDough();
void buildSauce();
void buildTopping();
Pizza getPizza();
}
// Конкретный строитель
class MargheritaPizzaBuilder implements PizzaBuilder {
private Pizza pizza;
public MargheritaPizzaBuilder() {
this.pizza = new Pizza();
}
public void buildSize() {
pizza.setSize("Medium");
}
public void buildDough() {
pizza.setDough("Thin crust");
}
public void buildSauce() {
pizza.setSauce("Tomato sauce");
}
public void buildTopping() {
pizza.setTopping("Mozzarella cheese");
}
public Pizza getPizza() {
return pizza;
}
}
// Директор
class PizzaDirector {
private PizzaBuilder builder;
public PizzaDirector(PizzaBuilder builder) {
this.builder = builder;
}
public Pizza constructPizza() {
builder.buildSize();
builder.buildDough();
builder.buildSauce();
builder.buildTopping();
return builder.getPizza();
}
}
// Использование строителя
public class Main {
public static void main(String[] args) {
PizzaBuilder margheritaBuilder = new MargheritaPizzaBuilder();
PizzaDirector director = new PizzaDirector(margheritaBuilder);
Pizza pizza = director.constructPizza();
System.out.println(pizza);
}
}
Заключение
Паттерн "Строитель" является мощным инструментом для создания сложных объектов. Он позволяет разработчикам создавать объекты поэтапно, что делает код более читаемым и гибким. Использование этого паттерна упрощает создание объектов с множеством параметров и позволяет легко изменять процесс их создания, что способствует улучшению структуры кода и облегчает его поддержку.
пример
https://gitlab.com/synergy9980417/razdel2/7_3