Koray PEKER
Menu
  • Anasayfa
  • Kütüphane
  • Kategoriler
    • Java
    • Spring
    • Tasarım Şablonları
    • Git
    • Maven
    • ORM Çatıları
    • VCS
    • SDLC
    • DevOps
    • Algoritma
    • Eğitim
    • Diğer
  • Hakkımda
Menu

Soyut Fabrika (Abstract Factory) Tasarım Şablonu

18 Temmuz 201821 Ekim 2018 tarihinde yayımlandı

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.

Java
1
2
3
4
5
public interface Document {
 
    public String getDocumentType();
 
}

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

Java
1
2
3
4
5
6
7
8
public class Pdf implements Document {
 
    @Override
    public String getDocumentType() {
        return "Pdf";
    }
 
}

Java
1
2
3
4
5
6
7
8
public class Word implements Document {
    
    @Override
    public String getDocumentType() {
        return "Word";
    }
    
}

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

Java
1
2
3
4
5
public interface DocumentAbstractFactory {
 
    public Document createDocument();
 
}

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

Java
1
2
3
4
5
6
7
8
public class PdfFactory implements DocumentAbstractFactory {
 
    @Override
    public Document createDocument() {
        return new Pdf();
    }
 
}

Java
1
2
3
4
5
6
7
public class WordFactory implements DocumentAbstractFactory {
 
    @Override
    public Document createDocument() {
        return new Word();
    }
}

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

Java
1
2
3
4
5
6
public class DocumentFactory {
 
    public static Document createDocument(DocumentAbstractFactory documentAbstractFactory){
        return documentAbstractFactory.createDocument();
    }
}

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

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class Test {
 
    public static void main(String[] args) {
 
        Document document = DocumentFactory.createDocument(new PdfFactory());
        System.out.println(document.getDocumentType());
 
        document = DocumentFactory.createDocument(new WordFactory());
        System.out.println(document.getDocumentType());
 
    }
}

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()

 

1 yorum yapıldı “Soyut Fabrika (Abstract Factory) Tasarım Şablonu”

  1. Süleman dedi ki:
    27 Temmuz 2018, 16:45

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

    Cevapla

Bir cevap yazın Cevabı iptal et

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

POPÜLER YAZILAR

  • Bir Yazılımcının Sırt Çantası
  • CI (Continuous integration) ve CD (Continuous Delivery/Deployment)
  • NullPointerException’dan Kaçış
  • İlk işime veda :(
  • Project : Lombok
  • Yük Testi ve SoapUI
  • JAR, WAR, EAR Üçlemesi
  • Enumeration nedir ?
  • Mutable ve Immutable nedir ?
  • REST Mimarisi ve RESTful Servisler

Ara

Son Yazılar

  • Çalışma Masam
  • Apache Kafka
  • Postman API’ları Görselleştirme
  • MongoDB Cheat Sheet
  • Splunk 101 – Giriş
  • Yük Testi ve SoapUI
  • Modern Veri Tabanları
  • Senior Stajyer ?!
  • API Dokümantasyon Önemi ve Swagger
  • Kod Tekrarı(Code Duplication) ve DRY

TAKİP ET

©2023 Koray PEKER