Merhaba değerli Java dostları,

Yeni bir design pattern yazısı ile beraberiz. Yine obje oluşturma sürecinde kullanılan builder design pattern, özellikle constructor üzerinde kullanılmak üzere karmaşık olan oluşturma sürecini daha basit bir hale getirmeyi amaçlar. Ayrıca bu oluşturma süreci boyunca bilgiler adım adım set edilir. Böylece son build işlemi ile beraber gerekli tüm özellikleri set edilmiş bir obje elde edilmiş olunur. Hemen örnek kodlarımıza bakalım.

package designpattern.builder;import java.awt.Color;public class CarBuilder {private Color carColor = null;

private String carName = “”;

private int hp = 0;

public Color getCarColor() {
return carColor;
}

public CarBuilder setCarColor(Color carColor) {
this.carColor = carColor;
return this;
}

public String getCarName() {
return carName;
}

public CarBuilder setCarName(String carName) {
this.carName = carName;
return this;
}

public int getHp() {
return hp;
}

public CarBuilder setHp(int hp) {
this.hp = hp;
return this;
}

public Car buildCar() {
return new Car(this);
}

}

package designpattern.builder;import java.awt.Color;public class Car {private Color carColor = null;

private String carName = “”;

private int hp = 0;

public Car(CarBuilder carBuilder) {
this.carColor = carBuilder.getCarColor();
this.carName = carBuilder.getCarName();
this.hp = carBuilder.getHp();
}

public Color getCarColor() {
return carColor;
}

public String getCarName() {
return carName;
}

public int getHp() {
return hp;
}

}

package designpattern.builder;import java.awt.Color;public class CarBuilderMain {public static void main(String[] args) {

CarBuilder carBuilder = new CarBuilder();

Car carA = carBuilder.setCarColor(Color.black).setCarName(“CarA”).setHp(100).buildCar();
Car carB = carBuilder.setCarColor(Color.white).setCarName(“CarB”).setHp(200).buildCar();

System.out.println(carA.getCarColor());
System.out.println(carA.getCarName());
System.out.println(carA.getHp());

System.out.println(carB.getCarColor());
System.out.println(carB.getCarName());
System.out.println(carB.getHp());

}

}

İlk sınıfımız aslında basit bir bean olarak görülebilir; fakat dikkat etmemiz gereken nokta her set metodu yine CarBuilder sınıfının var olan örneğini döndürmekte. Böylece main sınıfındaki ardışık set metotlarını kullanabilir hale geliyoruz. Car sınıfı ise sadece bir constructor tanımlayarak CarBuilder içindeki değerleri almaktadır.

Peki builder pattern bize ne gibi avantaj sağladı diye sorabilirsiniz. Öncelikle bir builder kullanmamış olsaydık Car sınıfı için constructor tanımlama ihtiyacımız olacaktı. Eklenecek her yeni alan için yeni bir constructor tanımlama ihtiyacı olacaktı. Bu çoğul ve karmaşık constructor yapısından dolayı belki de kullanıcı hiç istemediği alanları bile doldurmak zorunda kalacaktır. Ayrıca dikkat ederseniz CarBuilder için de herhangi bir constructor tanımlama ihtiyacı duymadık. Yine her zaman olduğu gibi abstract ve interface üzerinden giderek daha dinamik yapılar oluşturabiliriz.

Bol Java’ lı günler dileğiyle… 😀

No responses yet

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.