Builder Design Pattern

Merhaba arkadaşlar. Bu yazımda oldukça popüler ve işlevi büyük olan bir tasarım deseninden bahsetmek istiyorum.

Bu tasarım desenimizin ismi Builder ve Creational grubuna ait. Yapı olarak Abstract Factory desenine benzerlikleri vardır.

Bazen projelerimizde nesnelerimize ait birçok özellik olabilir ve bu nesnelerimizi farklı özellik/parametre ler ile oluşturmak isteriz. Dolayısıyla bazen çalıştığımız sınıflar içerisinde çok fazla parametre alan metodlar ve yapılandırıcılar kullanabiliyoruz. Bu kullanılabilirliği ve okunabilirliği oldukça zorlaştıran bir durum. Bazen aynı methodu çok fazla kez overload edip, kendimize iş yükü doğurabiliyoruz. İşte bu kısımda yardımımıza builder design pattern yetişiyor.

Şimdi gelin, bu tasarım deseniyle alakalı basit bir örnek yapalım.

Nesne sınıfımız :

public class Computer {
    private String brand;
    private String price;
    private String cpu;
    private String ram;

    public Computer(final String brand, final String price, final String cpu, final String ram) {
        this.brand = brand;
        this.price = price;
        this.cpu = cpu;
        this.ram = ram;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(final String brand) {
        this.brand = brand;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(final String price) {
        this.price = price;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(final String cpu) {
        this.cpu = cpu;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(final String ram) {
        this.ram = ram;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "brand=" + brand +
                ", cpu=" + cpu +
                ", ram=" + ram +
                ", price=" + price +
                '}';
    }
}

Builder sınıfımız :

public class ComputerBuilder {
    private String brand;
    private String price;
    private String cpu;
    private String ram;

    public ComputerBuilder setBrand(final String brand) {
        this.brand = brand;
        return this;
    }

    public ComputerBuilder setPrice(final String price) {
        this.price = price;
        return this;
    }

    public ComputerBuilder setCpu(final String cpu) {
        this.cpu = cpu;
        return this;
    }

    public ComputerBuilder setRam(final String ram) {
        this.ram = ram;
        return this;
    }

    public Computer buildComputer() {
        return new Computer(brand, price, cpu, ram);
    }
}

Test sınıfımız :

public class MainClass {
    public static void main(String[] args) {
        final ComputerBuilder computerBuilder = new ComputerBuilder();

        final Computer computer1 = computerBuilder
                .setBrand("ASUS")
                .setCpu("2,40 GHZ")
                .setPrice("1500 $")
                .setRam("8 GB")
                .buildComputer();

        System.out.println(computer1);

        final Computer computer2 = computerBuilder
                .setBrand("APPLE")
                .setCpu("2,60 GHZ")
                .setPrice("3500 $")
                .setRam("16 GB")
                .buildComputer();

        System.out.println(computer2);
    }
}

Bir sonraki yazımda görüşmek üzere, hoşçakalın 🙂