Abstract Factory Design Pattern
Bu pattern’in amacı client’ın ihtiyacı olan ve aralarında ilişkiler bulunan nesnelerin üretiminden sorumlu olan soyut fabrika sınıfları yaratmaktır. Kısacası: Birbiri ile ilişkili veya bağımlı objeleri onların concrete classlarını oluşturmadan create edilmesini sağlar.
ConcreteFactory
Asıl Fabrika
AbstractProduct
Product tipinin şablonu. Soyut ürün.
Product
Asıl Ürün
Client
İstemci uygulamanın ulaştığı ara katman. Soyut Fabrika nesnesi üzerinden ürün üretir.
Nesnenin üretiminden AbstractFactory arayüzünü uygulayan ConcreteFactory tipi sorumludur. Ürün AbstractProduct arayüzü uygulayan Product tipidir.
Bu pattenle ne zaman kullanılmalı?
- Client hangi hangi altsınıfların kullanması gerektiğini bilmiyorsa
- Bu alt sınıfların nasıl yaratılacağını bilmiyorsa ya da bu görevi alt sınıflara delege etmek istiyorsa
Bu pattern ile client ihtiyaç duyduğu ürünlerin tiplerine göre farklı fabrikaları seçip kullanabilir. Bu fabrikalar sayesinde istemcinin ihtiyacı olan ürünler ve bu ürünlere bağlı nesneler ve fonksiyonlar istemciden bağımsız olarak abstract düzeyde gerçekleştirilerek tamamen clienttan soyutlanmış olur.
Örneğin bir veritabanı bağlantı projesi düşünelim. Bu proje sayesinde MSSQL ve Oracle’a bağlantı kuruluyor ve client bağlanmak istediği veritabanı tipine göre sorgularını çalıştırabiliyor. Burada oluşturacağımız Connection ve Command nesneleri birbiri ile ilişkili nesneler.
Bu patternimizle ilgili örnek bir class diagramını yazalım.