Middle
Бунёдкор (Builder) дар контексти тарҳрезии нармафзор чист?
sobes.tech AI
Ҷавоб аз AI
Интихобии тарҳсозӣ, ки намунаи тарҳсозиро ҷудо мекунад, ки сохтани объекти мураккабро аз намоиши он ҷудо мекунад, имкон медиҳад, ки намоишҳои гуногуни объекти бо истифода аз як раванди сохтани ягона эҷод карда шаванд.
Принсипи кор:
- Маҳсулот (Product): Объекти мураккаб, ки бояд сохта шавад.
- Сохтани (Builder): Интерфейси абстрактӣ барои эҷоди қисмҳои маҳсулот.
- Сохтани конкретӣ (Concrete Builder): Иҷрои интерфейси "Сохтани", ки қисмҳои мушаххасро месозад ва онҳоро ба маҳсулоти тайёр ҷамъ мекунад.
- Директори (Director, интихобӣ): Тартиби қадамҳои сохтро муайян мекунад ва бо истифода аз Сохтани барои эҷоди маҳсулот.
Фоидаҳо:
- Имкон медиҳад, ки объектҳои мураккаб қадам ба қадам сохта шаванд.
- Логикаи сохтани объектро аз худи объект ҷудо мекунад.
- Имкон медиҳад, ки намоишҳои гуногуни объект бо истифода аз як раванди ягона эҷод карда шаванд.
- Бо илова кардани Concrete Builders навсозиро осон мекунад.
Норасоиҳо:
- Баъзе синфҳоро зиёд мекунад, зеро зарур аст, ки Concrete Builders ҷудогона сохта шаванд.
- Кодро барои объектҳои оддӣ мураккаб мекунад.
Маслиҳат барои истифода (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'}
}
}