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() { public CarBuilder setCarColor(Color carColor) { public String getCarName() { public CarBuilder setCarName(String carName) { public int getHp() { public CarBuilder setHp(int hp) { public Car buildCar() { } |
package designpattern.builder;import java.awt.Color;public class Car {private Color carColor = null; private int hp = 0; public Car(CarBuilder carBuilder) { public Color getCarColor() { public String getCarName() { public int getHp() { } |
package designpattern.builder;import java.awt.Color;public class CarBuilderMain {public static void main(String[] args) { Car carA = carBuilder.setCarColor(Color.black).setCarName(“CarA”).setHp(100).buildCar(); System.out.println(carA.getCarColor()); System.out.println(carB.getCarColor()); } } |
İ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…
Yazan: Faruk BOZAN