Ниже приведен пример кода шаблона проектирования 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().
Этот шаблон позволяет создавать сложные объекты шаг за шагом, обеспечивая гибкость и разделение процесса построения и конечного объекта.