Middle
Šta je Builder u kontekstu projektovanja softvera?
sobes.tech АИ
Одговор од АИ
Ово је образац дизајна који одваја изградњу сложеног објекта од његове презентације, омогућавајући стварање различитих презентација објекта коришћењем истог процеса изградње.
Принцип рада:
- Производ (Product): Сложен објекат који треба изградити.
- Градитељ (Builder): Апстрактни интерфејс за креирање делова производа.
- Конкретни градитељ (Concrete Builder): Реализација интерфејса "Градитељ", која креира конкретне делове производа и их саставља у готов производ.
- Директор (Director, опциони): Одређује редослед корака изградње и користи Градитеља за креирање производа.
Предности:
- Омогућава корак по корак креирање сложених објеката.
- Одваја логику изградње објекта од самог објекта.
- Омогућава креирање различитих презентација објекта истим процесом.
- Олакшава проширење додавањем нових Конкретних Градитеља.
Недостаци:
- Повећава број класа због потребе за креирањем посебних Конкретних Градитеља.
- Може компликовати код за једноставне објекте.
Пример употребе (Java):
Замислите креирање сложеног објекта "Кућа":
// Производ
class House {
private String walls;
private String roof;
private String windows;
private String doors;
public void setWalls(String walls) { this.walls = walls; }
public void setRoof(String roof) { this.roof = roof; }
public void setWindows(String windows) { this.windows = windows; }
public void setDoors(String doors) { this.doors = doors; }
@Override
public String toString() {
return "House{" +
"walls='" + walls + '\'' +
", roof='" + roof + '\'' +
", windows='" + windows + '\'' +
", doors='" + doors + '\'' +
'}';
}
}
// Градитељ
interface HouseBuilder {
void buildWalls();
void buildRoof();
void buildWindows();
void buildDoors();
House getResult();
}
// Конкретни Градитељ
class StoneHouseBuilder implements HouseBuilder {
private House house;
public StoneHouseBuilder() {
this.house = new House();
}
@Override
public void buildWalls() {
house.setWalls("Stone Walls");
}
@Override
public void buildRoof() {
house.setRoof("Tile Roof");
}
@Override
public void buildWindows() {
house.setWindows("Wooden Windows");
}
@Override
public void buildDoors() {
house.setDoors("Solid Wooden Doors");
}
@Override
public House getResult() {
return house;
}
}
// Директор (опциони)
class Director {
public void constructStoneHouse(HouseBuilder builder) {
builder.buildWalls();
builder.buildRoof();
builder.buildWindows();
builder.buildDoors();
}
}
// Коришћење
public class BuilderExample {
public static void main(String[] args) {
Director director = new Director();
HouseBuilder stoneHouseBuilder = new StoneHouseBuilder();
director.constructStoneHouse(stoneHouseBuilder);
House stoneHouse = stoneHouseBuilder.getResult();
System.out.println(stoneHouse); // Излаз: House{walls='Stone Walls', roof='Tile Roof', windows='Wooden Windows', doors='Solid Wooden Doors'}
}
}