Middle
Šta je builder u kontekstu razvoja softvera?
sobes.tech АИ
Одговор од АИ
Шаблон за дизајн кој одвојува конструирањето на сложен објект од неговото претставување, овозможувајќи создавање на различни претставувања на истиот процес на градба.
Клучни карактеристики:
- Одделување на одговорностите: Логиката за создавање на објектот (чекорите на градба) и претставувањето на објектот (крајниот производ) се одделени.
- Чекор по чекор градба: Објектот се гради чекор по чекор, што ја прави процесот пофлексибилен и појасен.
- Различни претставувања: Ист процес на градба може да се користи за создавање на различни варијанти на објектот.
- Инкапсулација: Деталите за создавање на објектот се скриени од клиентот, што ја олеснува неговата употреба.
Главни учесници:
- Builder (Градител): Апстрактен интерфејс или класа која дефинира чекорите за создавање на деловите на производот.
- ConcreteBuilder (Конкретен градител): Конкретна реализација на градителот која реално ги гради деловите на производот и го чува резултатот.
- Director (Директор): Класа која користи објектот ConcreteBuilder за да го конструира производот, повикувајќи ги соодветните методи во одредена секвенца.
- Product (Производ): Сложен објект кој се гради.
Пример за употреба:
Создавање на објект Pizza со различни состојки:
// Производ
class Pizza {
private String dough;
private String sauce;
private String cheese;
private List<String> toppings;
public void setDough(String dough) { this.dough = dough; }
public void setSauce(String sauce) { this.sauce = sauce; }
public void setCheese(String cheese) { this.cheese = cheese; }
public void addTopping(String topping) {
if (toppings == null) {
toppings = new ArrayList<>();
}
toppings.add(topping);
}
@Override
public String toString() {
return "Пица со тесто: " + dough + ", сос: " + sauce + ", сирење: " + cheese + ", topping-и: " + toppings;
}
}
// Интерфејс за градител
interface PizzaBuilder {
void buildDough();
void buildSauce();
void buildCheese();
void addTopping(String topping);
Pizza getResult();
}
// Конкретен градител
class MargheritaPizzaBuilder implements PizzaBuilder {
private Pizza pizza;
public MargheritaPizzaBuilder() {
this.pizza = new Pizza();
}
@Override
public void buildDough() {
pizza.setDough("Тенко тесто");
}
@Override
public void buildSauce() {
pizza.setSauce("Домати сос");
}
@Override
public void buildCheese() {
pizza.setCheese("Моцарела");
}
@Override
public void addTopping(String topping) {
// Margherita по подразбирање нема дополнителни topping-и
}
@Override
public Pizza getResult() {
return pizza;
}
}
// Директор
class Cook {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {
pizzaBuilder = pb;
}
public void constructPizza() {
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildCheese();
// Дополнителни topping-и можат да се додаваат овде врз основа на типот или барањата
}
}
// Клиентски код
public class PizzaShop {
public static void main(String[] args) {
Cook cook = new Cook();
PizzaBuilder margheritaBuilder = new MargheritaPizzaBuilder();
cook.setPizzaBuilder(margheritaBuilder);
cook.constructPizza();
Pizza pizza = margheritaBuilder.getResult();
System.out.println(pizza);
}
}