Sobes.tech
Middle

Tərtibatçı (Builder) dizayn nümunəsi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

"Tərtibçi" (Builder) nümunəsi, mürəkkəb obyektləri mərhələli şəkildə yaratmağa imkan verən, müxtəlif konfiqurasiya variantları təqdim edən yaradıcı dizayn nümunəsidir.

  • Təyinat: Obyektin qurulma prosesini onun təqdimatından ayırmaq. Eyni qurulma prosesinin müxtəlif təqdimatlarını almağa imkan verir.
  • Üstünlüklər:
    • Obyekti mərhələli şəkildə qurmağa imkan verir, qurulma detalları gizlidir.
    • Çoxsaylı qeyri-zəruri parametrlərlə obyektlərin yaradılmasını asanlaşdırır (bir çox arqumentli konstruktorlar və ya Telescoping Constructors anti-nümunəsindən fərqli olaraq).
    • Eyni qurma kodunu istifadə edərək müxtəlif obyekt təqdimatları yarada bilərsiniz.
  • Əsas iştirakçılar:
    1. Builder (Tərtibçi): Obyektin hissələrinin qurulma mərhələlərini müəyyən edən interfeys və ya abstrakt sinif.
    2. ConcreteBuilder (Ətraflı Tərtibçi): Builder interfeysinin tətbiqi, obyektin konkret hissələrini yaradır və nəticəni alma metodunu təqdim edir.
    3. Director (Direktor): Obyektin yaradılması üçün mərhələlərin ardıcıllığını müəyyən edir, Builder obyektindən istifadə edir. Direktor zəruri deyil və müştəri birbaşa Tərtibçi ilə işləyə bilər.
    4. Product (Məhsul): Qurulan obyekt.

Struktur nümunəsi (Java):

// Məhsul
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 + "]";
    }
}

// Tərtibçi interfeysi
interface CarBuilder {
    void buildEngine();
    void buildWheels();
    void buildColor();
    Car getResult();
}

// Ətraflı Tərtibçi
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 (İstəyə bağlı)
class CarDirector {
    private CarBuilder builder;

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

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

// Müştəri istifadəsi
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("Yaradılmış maşın: " + sportsCar);

        // Direktor olmadan birbaşa istifadə
        CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
        anotherSportsCarBuilder.buildEngine();
        anotherSportsCarBuilder.buildColor(); // Wheels olmadan qurulma
        Car partialCar = anotherSportsCarBuilder.getResult();
        System.out.println("Yaradılmış qismən maşın: " + partialCar);
    }
}