Middle
Программалык камсыздоону долбоорлоодо Builder деген эмне?
sobes.tech AI
AIден жооп
Бул дизайн үлгүсү, татаал объекттин курулушун анын көрсөтүүсүнөн бөлүп турат, бир эле курулуш процесси менен ар кандай объект көрсөтүүлөрүн түзүүгө мүмкүндүк берет.
Иш принципи:
- Өнүм (Product): Курулчу татаал объект.
- Куруучу (Builder): Объекттин бөлүктөрүн түзүү үчүн абстракттуу интерфейс.
- Конкреттүү куруучу (Concrete Builder): "Куруучу" интерфейсин ишке ашырат, конкреттүү бөлүктөрдү түзөт жана аларды даяр продуктка чогултат.
- Директор (Director, optional): Курулуш кадамдарынын тартибин аныктайт жана продукт түзүү үчүн Куруучуну колдонуп жатат.
Артыкчылыктары:
- Татаал объекттерди кадам-кадам түзүүгө мүмкүндүк берет.
- Объекттин курулуш логикасын объекттен бөлүп турат.
- Бир эле процесстин жардамы менен ар кандай объект көрсөтүүлөрүн түзүүгө мүмкүндүк берет.
- Жаңы Concrete Builderлерди кошуу менен кеңейтүүнү жеңилдетет.
Кемчиликтери:
- Ар бир жаңы Concrete Builder түзүү керектигинен класстардын саны көбөйөт.
- Жөнөкөй объекттер үчүн кодду кыйындатышы мүмкүн.
Колдонуу мисалы (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'}
}
}