Middle
Ce este un Builder în contextul proiectării software?
sobes.tech AI
Răspuns de la AI
Acest model de proiectare creational separă construcția unui obiect complex de reprezentarea sa, permițând crearea diferitelor reprezentări ale obiectului folosind același proces de construcție.
Principiul de funcționare:
- Produs (Product): Obiect complex care trebuie construit.
- Builder: Interfață abstractă pentru crearea părților produsului.
- Builder Concret (Concrete Builder): Implementarea interfeței "Builder" care creează părți specifice ale produsului și le asamblează într-un produs final.
- Director (opțional): Definește secvența pașilor de construcție și folosește Builder-ul pentru a crea produsul.
Avantaje:
- Permite construirea pas cu pas a obiectelor complexe.
- Separă logica construcției de obiectul în sine.
- Permite crearea diferitelor reprezentări ale obiectului cu același proces.
- Facilitează extinderea prin adăugarea de noi Builders concreți.
Dezavantaje:
- Crește numărul de clase din cauza necesității de a crea diferiți Builders concreți.
- Poate complica codul pentru obiecte simple.
Exemplu de utilizare (Java):
Să presupunem crearea unui obiect complex "Casă":
// Produs
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 + '\'' +
'}';
}
}
// Builder
interface HouseBuilder {
void buildWalls();
void buildRoof();
void buildWindows();
void buildDoors();
House getResult();
}
// Builder concret
class StoneHouseBuilder implements HouseBuilder {
private House house;
public StoneHouseBuilder() {
this.house = new House();
}
@Override
public void buildWalls() {
house.setWalls("Stânci de piatră");
}
@Override
public void buildRoof() {
house.setRoof("Tencuială cu țiglă");
}
@Override
public void buildWindows() {
house.setWindows("Ferestre din lemn");
}
@Override
public void buildDoors() {
house.setDoors("Uși din lemn masiv");
}
@Override
public House getResult() {
return house;
}
}
// Director (opțional)
class Director {
public void constructStoneHouse(HouseBuilder builder) {
builder.buildWalls();
builder.buildRoof();
builder.buildWindows();
builder.buildDoors();
}
}
// Utilizare
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); // Va afișa: House{walls='Stânci de piatră', roof='Tencuială cu țiglă', windows='Ferestre din lemn', doors='Uși din lemn masiv'}
}
}