Sobes.tech
Middle

'Builder' (Quruvchi) dizayn shabloni nima?

sobes.tech AI

AIdan javob

"Builder" (Quruvchi) dizayn shabloni murakkab obyektlarni bosqichma-bosqich yaratishga imkon beradigan va turli konfiguratsiya variantlarini taqdim etadigan yaratuvchi dizayn shablonidir.

  • Maqsad: Ob'ektni qurish jarayonini uning tasviridan ajratish. Bir xil qurilish jarayonining turli xil tasvirlarini olish imkonini beradi.
  • Afzalliklar:
    • Ob'ektni bosqichma-bosqich qurishga imkon beradi, qurilish tafsilotlarini yashiradi.
    • Ko'p miqdordagi ixtiyoriy parametrlar bilan obyektlarni yaratishni osonlashtiradi (bir nechta argumentli konstruktorlar yoki Telescoping Constructors anti-patterniga qarshi).
    • Bir xil qurilish kodidan foydalanib, obyektning turli tasvirlarini yaratish mumkin.
  • Asosiy ishtirokchilar:
    1. Builder (Quruvchi): Ob'ektning qismlarini qurish uchun bosqichlarni belgilovchi interfeys yoki abstrakt sinf.
    2. ConcreteBuilder (Aniq Quruvchi): Builder interfeysini amalga oshiradigan, obyektning aniq qismlarini yaratadigan va yakuniy natijani olish uchun metod taqdim etadigan sinf.
    3. Director (Direktor): Ob'ektni yaratish uchun bosqichlar ketma-ketligini belgilaydi, Builder ob'ekti yordamida. Direktor ixtiyoriy va mijoz to'g'ridan-to'g'ri Quruvchi bilan ishlashi mumkin.
    4. Product (Mahsulot): Qurilayotgan obyekt.

Java misol strukturasini ko'rib chiqamiz:

// Mahsulot
class Car {
    private String engine;
    private int wheels;
    private String color;

    public void setEngine(String engine) {
        this.engine = engine;
    }

    public void setWheels(int wheels) {
        this.wheels = wheels;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car [engine=" + engine + ", wheels=" + wheels + ", color=" + color + "]";
    }
}

// Quruvchi interfeysi
interface CarBuilder {
    void buildEngine();
    void buildWheels();
    void buildColor();
    Car getResult();
}

// Aniq Quruvchi
class SportsCarBuilder implements CarBuilder {
    private Car car = new Car();

    @Override
    public void buildEngine() {
        car.setEngine("V8");
    }

    @Override
    public void buildWheels() {
        car.setWheels(4);
    }

    @Override
    public void buildColor() {
        car.setColor("Red");
    }

    @Override
    public Car getResult() {
        return car;
    }
}

// Direktor (ixtiyoriy)
class CarDirector {
    private CarBuilder builder;

    public CarDirector(CarBuilder builder) {
        this.builder = builder;
    }

    public void constructCar() {
        builder.buildEngine();
        builder.buildWheels();
        builder.buildColor();
    }
}

// Mijozdan foydalanish
public class Client {
    public static void main(String[] args) {
        CarBuilder sportsCarBuilder = new SportsCarBuilder();
        CarDirector director = new CarDirector(sportsCarBuilder);

        director.constructCar();
        Car sportsCar = sportsCarBuilder.getResult();
        System.out.println("Yaratilgan avtomobil: " + sportsCar);

        // Direktorisiz to'g'ridan-to'g'ri foydalanish
        CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
        anotherSportsCarBuilder.buildEngine();
        anotherSportsCarBuilder.buildColor(); // Rul olmadan qurish
        Car partialCar = anotherSportsCarBuilder.getResult();
        System.out.println("Yaratilgan qisman avtomobil: " + partialCar);
    }
}