Soyut Fabrika (Abstract Factory) Tasarım Şablonu

Oluşturucu (Creational) tasarım şablonlarından biridir. Birbiriyle ilişkili nesne grupları (nesne ailesi) oluşturmak için bu şablon kullanılır. Soyut Fabrika sınıfı interface sınıfı olarak tanımlanır ve bu interface içerisinde aynı aileden nesneler oluşturmak için metotlar tanımlanır. Her nesne ailesi bir interface sınıfı ile temsil edilir.

Java’da fabrika tasarım modeline aşina iseniz, sağlanan alt nesneleri döndüren tek bir fabrika sınıfına sahip olduğumuzu ve fabrika sınıfının if-else veya switch deyimini kullandığını fark edersiniz.

Soyut Fabrika modelinde, if-else bloğundan kurtulup, her bir alt sınıf için bir fabrika sınıfına ve alt-sınıfı döndürecek bir Soyut Fabrika sınıfına sahibiz. İlk başta kafa karıştırıcı görünüyor ama uygulamayı gördüğünüzde, Fabrika ve Soyut Fabrika deseni arasındaki nüansı kavramak ve anlamak gerçekten çok kolay. Bu sebeple Fabrika tasarım şablonundaki aynı örneklerle açıklamaya çalışacağım.

Şimdi bu interface’i implement eden alt sınıflarımızı oluşturalım;

Sonrasında soyut fabrika sınıfımızı oluşturalım;

Alt sınıflardaki somut nesnelerimiz için somut fabrika sınıflarımızı oluşturuyoruz;

Son olarak, soyut fabrika sınıfımızı kullanan somut bir sınıf oluşturalım;

Tasarımımızı tamamladık ve şimdi test edelim. Test sınıfımız;

Yararları nelerdir ?

  • Soyut Fabrika şablonu, interface üzerine yaklaşım sağlar.
  • Soyut Fabrika şablonu “fabrikaların fabrikası” dır ve daha fazla ürünü karşılamak için kolayca genişletilebilir, örneğin başka bir alt sınıf  olsaydı örneğin Excel bunun için ExcelFactory fabrika sınıfını eklememiz yeterli olacaktır.
  • Soyut Fabrika şablonu sağlamdır ve Fabrika modelinin koşullu mantığından kaçınır.

JDK’ da örnekleri

  • javax.xml.parsers.DocumentBuilderFactory#newInstance()
  • javax.xml.transform.TransformerFactory#newInstance()
  • javax.xml.xpath.XPathFactory#newInstance()

 

Beğenebileceğiniz Diğer Yazılar

1 Yorum

  1. Süleman dedi ki:

    Ellerinize sağlık çok güzel ve anlaşılır bir makale olmuş

Bir cevap yazın

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