Middle
Dasturlash dizaynida Builder nima?
sobes.tech AI
AIdan javob
Bu, murakkab ob'ektni qurish jarayonidan uning tasvirini ajratadigan va bir xil qurilish jarayonidan foydalanib, ob'ektning turli xil tasvirlarini yaratishga imkon beradigan yaratuvchi dizayn shablonidir.
Ishlash prinsipi:
- Mahsulot (Product): Qurilishi kerak bo'lgan murakkab ob'ekt.
- Quruvchi (Builder): Mahsulotning qismlarini yaratish uchun abstrakt interfeys.
- Aniq Quruvchi (Concrete Builder): "Quruvchi" interfeysini amalga oshiradigan va mahsulotning aniq qismlarini yaratib, ularni yig'ib, tayyor mahsulotga aylantiradigan sinf.
- Direktor (ixtiyoriy): Qurilish bosqichlarining ketma-ketligini belgilaydi va Mahsulotni yaratish uchun Quruvchidan foydalanadi.
Afzalliklar:
- Murakkab ob'ektlarni bosqichma-bosqich qurishga imkon beradi.
- Qurilish mantiqini ob'ektning o'zidan ajratadi.
- Bir xil qurilish jarayonidan foydalanib, ob'ektning turli xil tasvirlarini yaratishga imkon beradi.
- Yangi Aniq Quruvchilar qo'shish orqali kengaytirishni osonlashtiradi.
Kamchiliklar:
- Har bir Aniq Quruvchi uchun alohida sinf yaratish zarurligi sababli sinflar sonini oshiradi.
- Oddiy ob'ektlar uchun kodni murakkablashtirishi mumkin.
Foydalanish misoli (Java):
Murakkab "Uy" ob'ektini yaratishni tasavvur qilamiz:
// Mahsulot
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 + '\'' +
'}';
}
}
// Quruvchi
interface HouseBuilder {
void buildWalls();
void buildRoof();
void buildWindows();
void buildDoors();
House getResult();
}
// Aniq Quruvchi
class StoneHouseBuilder implements HouseBuilder {
private House house;
public StoneHouseBuilder() {
this.house = new House();
}
@Override
public void buildWalls() {
house.setWalls("Tosh devorlar");
}
@Override
public void buildRoof() {
house.setRoof("Tile Roof");
}
@Override
public void buildWindows() {
house.setWindows("Drejaning oynalari");
}
@Override
public void buildDoors() {
house.setDoors("Mustahkam yog'och eshiklar");
}
@Override
public House getResult() {
return house;
}
}
// Direktor (ixtiyoriy)
class Director {
public void constructStoneHouse(HouseBuilder builder) {
builder.buildWalls();
builder.buildRoof();
builder.buildWindows();
builder.buildDoors();
}
}
// Foydalanish
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); // Natija: House{walls='Tosh devorlar', roof='Tile Roof', windows='Drejaning oynalari', doors='Mustahkam yog'och eshiklar'}
}
}