Middle
Kas yra Builder programinės įrangos projektavimo kontekste?
sobes.tech AI
Atsakymas iš AI
Tai yra kūrimo dizaino šablonas, kuris atskiria sudėtingo objekto konstravimą nuo jo pateikimo, leidžiant kurti įvairias objekto reprezentacijas naudojant tą patį konstravimo procesą.
Veikimo principas:
- Produktas (Product): Sudėtingas objektas, kurį reikia sukurti.
- Konstruktorius (Builder): Abstrakti sąsaja produkto dalių kūrimui.
- Konkretaus konstruktoriaus (Concrete Builder): Sąsajos "Konstruktorius" įgyvendinimas, kuris kuria konkrečias dalis ir sujungia jas į galutinį produktą.
- Direktorius (Director, optional): Nustato konstravimo žingsnių seką ir naudoja Konstruktorių produkto kūrimui.
Privalumai:
- Leidžia žingsnis po žingsnio kurti sudėtingus objektus.
- Atskiria objekto konstravimo logiką nuo paties objekto.
- Leidžia kurti įvairias objekto reprezentacijas naudojant tą patį procesą.
- Lengvai plečiasi, pridedant naujus Konkrečius Konstruktorius.
Trūkumai:
- Padidina klasių skaičių dėl būtinybės kurti atskirus Konkrečius Konstruktorius.
- Gali sudėtinginti kodą paprastiems objektams.
Naudojimo pavyzdys (Java):
Įsivaizduokime sudėtingo objekto "Namas" kūrimą:
// Produktas
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 + '\'' +
'}';
}
}
// Konstruktorius
interface HouseBuilder {
void buildWalls();
void buildRoof();
void buildWindows();
void buildDoors();
House getResult();
}
// Konkretaus konstruktorius
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;
}
}
// Direktorius (pasirinktinai)
class Director {
public void constructStoneHouse(HouseBuilder builder) {
builder.buildWalls();
builder.buildRoof();
builder.buildWindows();
builder.buildDoors();
}
}
// Naudojimas
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); // Išvestis: House{walls='Stone Walls', roof='Tile Roof', windows='Wooden Windows', doors='Solid Wooden Doors'}
}
}