Строим лучше: изучение шаблона проектирования Builder в Java

Ниже приведен пример кода шаблона проектирования Builder на Java:

// Product class
class House {
    private String foundation;
    private String structure;
    private String roof;
    private String interior;
    public void setFoundation(String foundation) {
        this.foundation = foundation;
    }
    public void setStructure(String structure) {
        this.structure = structure;
    }
    public void setRoof(String roof) {
        this.roof = roof;
    }
    public void setInterior(String interior) {
        this.interior = interior;
    }
// Other methods specific to the product
}
// Builder interface
interface HouseBuilder {
    void buildFoundation();
    void buildStructure();
    void buildRoof();
    void buildInterior();
    House getHouse();
}
// Concrete builder
class ConcreteHouseBuilder implements HouseBuilder {
    private House house;
    public ConcreteHouseBuilder() {
        this.house = new House();
    }
    @Override
    public void buildFoundation() {
        house.setFoundation("Concrete");
    }
    @Override
    public void buildStructure() {
        house.setStructure("Brick and Concrete");
    }
    @Override
    public void buildRoof() {
        house.setRoof("Tiles");
    }
    @Override
    public void buildInterior() {
        house.setInterior("Basic");
    }
    @Override
    public House getHouse() {
        return house;
    }
}
// Director
class CivilEngineer {
    private HouseBuilder houseBuilder;
    public CivilEngineer(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }
    public House constructHouse() {
        houseBuilder.buildFoundation();
        houseBuilder.buildStructure();
        houseBuilder.buildRoof();
        houseBuilder.buildInterior();
        return houseBuilder.getHouse();
    }
}
// Usage
public class Main {
    public static void main(String[] args) {
        HouseBuilder houseBuilder = new ConcreteHouseBuilder();
        CivilEngineer civilEngineer = new CivilEngineer(houseBuilder);
        House house = civilEngineer.constructHouse();
        // Do something with the house object
    }
}

В приведенном выше коде мы реализовали шаблон проектирования «Строитель» для строительства дома. Класс Houseпредставляет продукт, который мы хотим создать. Интерфейс HouseBuilderопределяет этапы строительства дома, а интерфейс ConcreteHouseBuilderреализует эти шаги. Класс CivilEngineerвыступает в роли директора и организует процесс построения.

Чтобы использовать шаблон «Строитель», вы создаете объект «Строитель» (в данном случае ConcreteHouseBuilder) и передаете его директору (CivilEngineer). Затем директор строит дом, вызывая методы строителя в правильном порядке. Наконец, вы можете получить построенный дом, используя метод строителя getHouse().

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