Wzorzec projektowy— BUILDER

Wzorzec projektowy Builder jest używany w celu konstrukcji złożonych obiektów krok po kroku. Pozwala na tworzenie różnych wariantów obiektu bez konieczności bezpośredniej manipulacji jego konstrukcją
// Produkt, który chcemy zbudować
class Product {
private String part1;
private String part2;
public void setPart1(String part1) {
this.part1 = part1;
}
public void setPart2(String part2) {
this.part2 = part2;
}
public void showInfo() {
System.out.println("Part 1: " + part1);
System.out.println("Part 2: " + part2);
}
}
// Interfejs Buildera
interface Builder {
void buildPart1(String part1);
void buildPart2(String part2);
Product getResult();
}
// Konkretna implementacja Buildera
class ConcreteBuilder implements Builder {
private Product product = new Product();
@Override
public void buildPart1(String part1) {
product.setPart1(part1);
}
@Override
public void buildPart2(String part2) {
product.setPart2(part2);
}
@Override
public Product getResult() {
return product;
}
}
// Dyrektor, który nadzoruje proces budowy
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.buildPart1("A");
builder.buildPart2("B");
}
}
// Klient
public class Client {
public static void main(String[] args) {
// Utworzenie konkretnej implementacji Buildera
Builder builder = new ConcreteBuilder();
// Utworzenie dyrektora i przekazanie mu Buildera
Director director = new Director(builder);
// Proces budowy
director.construct();
// Uzyskanie gotowego produktu od Buildera
Product product = builder.getResult();
// Wyświetlenie informacji o produkcie
product.showInfo();
}
}W tym przykładzie mamy klasę Product, która reprezentuje produkt, który chcemy zbudować. Interfejs Builder definiuje operacje budowania różnych części produktu, a klasa ConcreteBuilder implementuje ten interfejs, konstruując konkretny produkt.
Klasa Director nadzoruje proces budowy, korzystając z obiektu Builder do konstruowania produktu. Klient używa Director i Buildera do uzyskania gotowego produktu, który można następnie wykorzystać. Wzorzec Builder umożliwia elastyczne tworzenie różnych konfiguracji produktów bez konieczności modyfikacji klas produktu.