Yapıcı (Builder) Tasarım Şablonu

Yapıcı (Builder) Tasarım Şablonu, Factory Pattern(Fabrika şablonu) ve Abstract Factory Pattern(Soyut Fabrika şablonu) gibi Oluşturucu Tasarım Şablonlarından (Creational Desing Pattern) birisidir.

Bu şablon, Fabrika tasarım şablonundaki sorunları çözmeye yöneliktir. Eğer nesne bir çok nitelik (property) içeriyorsa oluşturucu şablon kullanmak uygundur. Aşağıdaki örnekde neden kullanıldığını daha iyi anlayacaksınız.

Bu şablonu uygulamak için yapılması gerekenler

  • İlk önce, statik iç içe geçmiş bir sınıf oluşturup, tüm bağımsız değişkenleri dış sınıftan Oluşturucu sınıfına kopyalamanız gerekir. Adlandırma kuralına uymalıyız ve eğer sınıf adı Computer ise, oluşturucu sınıfının adı ComputerBuilder olmalıdır.
  • Oluşturucu sınıfının gerekli özellikleri parametre olarak içeren bir public yapılandırıcıya(constructor) sahip olması gerekir.
  • Oluşturucu sınıfı, isteğe bağlı parametreleri ayarlamak için yöntemlere sahip olmalıdır ve isteğe bağlı özellikleri ayarladıktan sonra aynı Oluşturucu nesnesini döndürmelidir.
  • Son adım oluşturucu sınıfında, istemci tarafından ihtiyaç duyulan nesneyi döndürecek bir build() yöntemi sağlamaktır.

Uygulama Örneği 

Diyelim ki, User sınıfımız olsun ve bunun dört tane özelliği olsun. Sınıfınızdaki bazı özelliklerin gerekli olduğunu hayal edin; bazıları ise isteğe bağlıdır.

Bu sınıftan nesne oluşturmak istediğimizde zorunlu olan iki özellik için bir yapılandırıcı(constructor) yapmak ve diğer özellikler içinde bu constructor’u overload etmek zorunda kalacağız.

Yalnızca birkaç özellik(property) olduğunda büyük sorun teşkil etmeyebilir, ancak özellik sayısı arttıkça kodun okunması ve bakımı daha zorlaşır. Daha da önemlisi, bu sınıfı kullanacak diğer kişiler için gittikçe zorlaşıyor. Hangi yapılandırıcıyı(constructor) çağırayım? İki parametre olanı mı ? Üç parametre olanı mı ? Elimde email yok gsmNo varsa hangisi ile nesne oluşturmayalım ???

Peki bu aşama da ne yapabiliriz ? Zorunlu olan iki parametre için bir constructor ve diğer parametreler için getter-setter koyarak sınıfımızı tasarlayabiliriz.

Bu yaklaşım, okuması ve bakımı daha kolay görünüyor. Bir istemci(client) olarak zorunlu iki parametreli bir nesne oluşturabilir ve daha sonra yalnızca ilgilendiğim özellikleri ayarlayabilirim.

Peki bunun nesi var? Bu çözümün iki ana sorunu vardır;

  • Sınıfın sahip olduğu tüm dört özellik için değerleri olan bir User nesnesi oluşturmak istiyorsanız, nesnenin, tüm setter yöntemleri çağrılıncaya kadar tam bir duruma sahip olmayacaktır.
  • Artık sınıf tamamiyle dışarı açıldı ve Kullanıcı nesnenin tüm özellikleri değiştirilebilir şekildedir.

Tam bu haldeyken, Yapıcı (Builder) tasarım şablonu çıkıyor. Benim isteğim sadece bana istediğim özelliklerle User nesnesi yaratmak başka hiç bir müdahele yapamamalıyım. Adından da belli sadece oluştur.

Test Sınıfı

Java’da Örnekleri :

  • java.lang.StringBuilder#append() (unsynchronized)
  • java.lang.StringBuffer#append() (synchronized)

Beğenebileceğiniz Diğer Yazılar

2 Yorum

  1. 10 Haziran 2018

    […] sınıf seviyesinde koymanız yeterlidir. Builder tasarım şablonunu daha iyi anlamak için buradan yazımı […]

  2. 21 Ekim 2018

    […] Yapıcı Şablonu (Builder Pattern) […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir