Sobes.tech
Middle

Yapı Tasarım Deseni 'Builder' (İnşaatçı) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Yapı "Builder" (İnşaatçı) tasarım deseni, karmaşık nesneleri adım adım oluşturmayı sağlayan ve çeşitli yapılandırma seçenekleri sunan bir yaratıcı tasarım desenidir.

  • Amacı: Bir nesnenin inşası sürecini onun temsiliyetinden ayırmak. Aynı inşaat sürecinin farklı temsillerini elde etmeyi sağlar.
  • Avantajlar:
    • Bir nesneyi adım adım inşa etmeye olanak tanır, inşaat detaylarını gizler.
    • Çok sayıda isteğe bağlı parametre içeren nesnelerin oluşturulmasını kolaylaştırır (birden fazla argümanlı yapıcılar veya Telescoping Constructors anti-patentine kıyasla).
    • Aynı inşaat kodu, nesnenin farklı temsillerini oluşturmak için kullanılabilir.
  • Ana katılımcılar:
    1. Builder (İnşaatçı): Nesnenin parçalarını oluşturma adımlarını tanımlayan arayüz veya soyut sınıf.
    2. ConcreteBuilder (Somut İnşaatçı): Builder arayüzünü uygulayan, nesnenin belirli parçalarını oluşturan ve nihai sonucu almak için bir yöntem sağlayan sınıf.
    3. Director (Yönetici): Bir Builder nesnesi kullanarak nesnenin oluşturulması için adımlar dizisini belirler. Yönetici isteğe bağlıdır ve müşteri doğrudan İnşaatçı ile çalışabilir.
    4. Product (Ürün): İnşa edilen nesne.

Java örneği yapısı:

// Ürün
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 + "]";
    }
}

// Builder arayüzü
interface CarBuilder {
    void buildEngine();
    void buildWheels();
    void buildColor();
    Car getResult();
}

// Somut Builder
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;
    }
}

// Yönetici (İsteğe bağlı)
class CarDirector {
    private CarBuilder builder;

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

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

// Müşteri kullanımı
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("Built car: " + sportsCar);

        // Yönetici olmadan doğrudan kullanım
        CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
        anotherSportsCarBuilder.buildEngine();
        anotherSportsCarBuilder.buildColor(); // Rüersiz inşaat
        Car partialCar = anotherSportsCarBuilder.getResult();
        System.out.println("Built partial car: " + partialCar);
    }
}