Builder – Tasarım Kalıpları

Merhabalar, bu yazımda Oluşturucu Tasarım Kalıplarından Builder Tasarım Kalıbına değineceğim. Builder, nesne üretim sürecinde değişik parçalar birleştirilip istenilen tipte nesne oluşumunu amaçlamaktadır. Klasik olarak Java’da bir nesne oluşturmak istediğimizde aşağıdaki kod bloklarına benzer şekilde nesnemizi oluştururuz.

Person person = new Person();
Person person2 = new Person("Ufuk", "Halis", 25);

Görüldüğü gibi Person sınıfı 2 tane constructer’a sahip ve nesne oluşturmak istendiği zaman bu ikisinden birini tercih etmek zorundayız. Peki ya bu sınıfta sadece Ad ve Soyad geçecek biçimde nesne oluşturmak istersek, evet yolu basit gidip bu iki parametreli yeni constructer’ı Person sınfında yaratmak. Ancak gereksinimler iyice değiştiği zaman ne olacak, Ad-Yaş, Soyad-Yaş gibi. Person sınıfı constructer’dan geçilmeyecek 🙂 İşte builder bu durumda yardımımıza giriyor. Nesnemizi oluştururken sadece set etmek istediğimiz alanları ayarlıyoruz ve nesnemizi yaratıyoruz. Hem kodun okunuşu bakımından hem de esnekliği bakımından daha iyi bir hale gelmiş oluyor. Person sınıfımızı Builder pattern’e uygun olacak şekilde tasarlayalım.

Person.java

public class Person {
    private String firstName;
    private String lastName;
    private int age;
    private String address;
    private String telephone;

    public static class Builder {
        private Person person;

        public Builder() {
            person = new Person();
        }

        public Builder setAddress(String address) {
            person.address = address;
            return this;
        }

        public Builder setAge(int age) {
            person.age = age;
            return this;
        }

        public Builder setFirstName(String firstName) {
            person.firstName = firstName;
            return this;
        }

        public Builder setLastName(String lastName) {
            person.lastName = lastName;
            return this;
        }

        public Builder setTelephone(String telephone) {
            person.telephone = telephone;
            return this;
        }

        public Person build() {
            return person;
        }
    }

}

Main.java

public class Main {

    public static void main(String[] args) {
        Person person = new Person.Builder().
                        setFirstName("Ufuk").
                        setLastName("Halis").
                        setAge(25).build();
        Person person2 = new Person.Builder().build();
    }
}

Görüldüğü gibi Person sınıfında bir Builder sınıfı yarattık ve Person sınıfının sahip olduğu değerleri bu Builder sınıfı içerisinde set lemiş olduk. Person sınıfındaki tüm değerlerimiz optional bir bakıma, bazı durumlarda Builder ile bir nesne yaratmak istiyoruz ancak olmazsa olmaz başlangıç değerleri istiyorsak, bunuda Builder’ın constructer’ında yapabiliriz. Böylece o alanlar required hale gelir.

Builder Tasarım kalıbı, karmaşık nesne oluşturma süreçlerinden kurtararak değişik parametreler ile nesne oluşturmak istenildiğinde kullanılması tercih edilir.

Bir yazının daha sonuna gelmiş bulunuyoruz böylelikle 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s