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 🙂

Singleton Design Pattern

Merhaba arkadaşlar.

Uzun bir süre yazmıyordum, aranıza tekrar döndüğüm için ve uzun bir zaman sonra tekrar yazdığım için mutluyum açıkcası. Bugün size singleton design pattern hakkında biraz bahsetmek istiyorum.

Singleton design pattern creational design pattern ailesine ait olan bir tasarım desenidir. Bu tasarım deseninin kullanım amacı bazı durumlarda bir sınıftan birden fazla nesne oluşturulmasına gerek yoktur. Örneğin; uygulama katmanımızın veri tabanına bağlantısını yöneten sınıftan birden fazla nesne oluşturmaya gerek yoktur. Her çağıran için bu sınıftan ayrı ayrı nesne oluşturmak uygulama verimliliğini düşürecektir. İşte singleton deseni bize bu konuda yardımcı oluyor. Bu desen ile ilgili sınıftan birden fazla nesne oluşturulmasının önüne geçmiş oluruz.

Bir sınıfı singleton prensibine uyarlamak için yapılandırıcısının erişim belirtecini private yapmamız yeterlidir.

Örnek Java kodu :

public class SingletonObject {

    private static SingletonObject singletonObject = null;

    private SingletonObject(){
        //
    }

    public static SingletonObject getInstance(){
        if (singletonObject == null){
            singletonObject = new SingletonObject();
        }
        return singletonObject;
    }
}

public class MainClass {
    public static void main(String[] args) {
        
        SingletonObject instance = SingletonObject.getInstance();

        //SingletonObject instance1 = new SingletonObject(); Hatalı Kullanım
    }
}

Bir dahaki yazıda görüşmek üzere, sevgiyle kalın.