Wzorzec projektowy Builder służy do rozdzielenia konstrukcji złożonego obiektu od jego reprezentacji. Pozwala to na produkcję różnych typów obiektów, używając tego samego procesu konstrukcji. Jest szczególnie użyteczny, gdy obiekt musi być utworzony z wieloma opcjonalnymi elementami lub kiedy proces tworzenia obiektu jest bardzo złożony. Wzorzec Builder oddziela konstrukcję obiektu od jego klasy i pozwala na konstrukcję krok po kroku.
Przykład implementacji wzorca Builder
W tym przykładzie zbudujemy klasę Pizza
, która będzie reprezentować pizzę z różnymi składnikami. Użyjemy wzorca Builder, aby umożliwić elastyczne tworzenie obiektów Pizza
z różnymi kombinacjami składników.
Klasa Pizza
// Definicja klasy Pizza
public class Pizza {
private String dough;
private String sauce;
private List<String> toppings;
// Prywatny konstruktor
private Pizza(PizzaBuilder builder) {
this.dough = builder.dough;
this.sauce = builder.sauce;
this.toppings = builder.toppings;
}
// Getter dla ciasta
public String getDough() {
return dough;
}
// Getter dla sosu
public String getSauce() {
return sauce;
}
// Getter dla dodatków
public List<String> getToppings() {
return toppings;
}
// Statyczna klasa Builder
public static class PizzaBuilder {
private String dough = "";
private String sauce = "";
private List<String> toppings = new ArrayList<>();
// Metoda ustawiająca ciasto
public PizzaBuilder dough(String dough) {
this.dough = dough;
return this;
}
// Metoda ustawiająca sos
public PizzaBuilder sauce(String sauce) {
this.sauce = sauce;
return this;
}
// Metoda dodająca dodatek
public PizzaBuilder addTopping(String topping) {
this.toppings.add(topping);
return this;
}
// Metoda budująca obiekt Pizza
public Pizza build() {
return new Pizza(this);
}
}
}
Użycie wzorca Builder do stworzenia pizzy
public class PizzaOrderDemo {
public static void main(String[] args) {
Pizza pizza = new Pizza.PizzaBuilder()
.dough("grube")
.sauce("pomidorowy")
.addTopping("ser")
.addTopping("pieczarki")
.build();
System.out.println("Zamówiona pizza ma następujące składniki:");
System.out.println("Ciasto: " + pizza.getDough());
System.out.println("Sos: " + pizza.getSauce());
System.out.println("Dodatki: " + pizza.getToppings());
}
}
Podsumowanie
Wzorzec projektowy Builder jest niezwykle użytecznym narzędziem w przypadkach, gdy konstrukcja obiektu jest złożona lub gdy obiekt musi być stworzony z wieloma opcjonalnymi elementami. Poprzez oddzielenie procesu konstrukcji obiektu od jego reprezentacji, wzorzec Builder umożliwia tworzenie różnorodnych obiektów, używając tego samego kodu konstrukcyjnego. W przedstawionym przykładzie zastosowanie wzorca Builder pozwoliło na elastyczne tworzenie obiektów Pizza
z różnymi kombinacjami składników, co ilustruje moc i elastyczność tego wzorca projektowego.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.