Рубрики
Без рубрики

Шаблон строителя

Отделите конструкцию сложного объекта от его представления так, чтобы одна и та же конструкция p… Помеченный тегом creational, шаблоны проектирования, java, шаблон.

Отделите построение сложного объекта от его представления, чтобы один и тот же процесс построения мог создавать разные представления.

  • Конструктор: задает абстрактный интерфейс для создания частей объекта продукта
  • ConcreteBuilder: конструирует и собирает части продукта, реализуя интерфейс Builder. Определяет и отслеживает создаваемое им представление. Предоставляет интерфейс для извлечения продукта.
  • Директор: создает объект с помощью интерфейса Builder
  • Продукт: представляет собой сложный строящийся объект. Concrete Builder создает внутреннее представление продукта и определяет процесс, с помощью которого он собирается. Включает классы, которые определяют составные части, включая интерфейсы для сборки деталей в конечный результат.
public class Main {

    public static void main(String[] args) {
        Director director = new Director();

        Builder b1 = new ConcreteBuilder1();
        Builder b2 = new ConcreteBuilder2();

        director.construct(b1);
        Product p1 = b1.getResult();
        p1.show();

        director.construct(b2);
        Product p2 = b2.getResult();
        p2.show();
    }
}

public class Director {

    public void construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
    }
}

public interface Builder {

    Product getResult();

    void buildPartA();

    void buildPartB();
}

public class ConcreteBuilder1 implements Builder {

    private Product product = new Product();

    @Override
    public Product getResult() {
        return product;
    }

    @Override
    public void buildPartA() {
        product.add("PartA");
    }

    @Override
    public void buildPartB() {
        product.add("PartB");
    }
}

public class ConcreteBuilder2 implements Builder {

    private Product product = new Product();

    @Override
    public Product getResult() {
        return product;
    }

    @Override
    public void buildPartA() {
        product.add("PartX");
    }

    @Override
    public void buildPartB() {
        product.add("PartY");
    }
}

public class Product {

    private List parts = new ArrayList<>();

    public void show() {
        System.out.println("\nProduct Parts -------");
        for (String part : parts) {
            System.out.println(part);
        }
    }

    public void add(String part) {
        parts.add(part);
    }
}
Product Parts -------
PartA
PartB

Product Parts -------
PartX
PartY

eidherjulian61/дизайн-шаблоны

Основные шаблоны Проектирования

ид – 27 сентября ・ 1 минута чтения

Оригинал: “https://dev.to/eidher/builder-patter-12jc”