15 Kasım 2012 Perşembe

Design Patterns - Abstract Factory Pattern

Merhaba Arkadaşlar,
 
Bu yazımızda Tasarım Desenleri serimize "Abstract Factory Pattern", Türkçe'si Soyut Fabrika Tasarımı'nı inceleyeceğiz. 
 
Yeni konumuza geçmeden önce bir önceki konumuzu hatırlayalım (Biz cahil insanlar olarak genelde yazdıklarımızı tekrar okumayız ve yazdığımız bilgileri unutmaya terkederiz).
 
Bir önceki konumuz da fabrika tasarımı incelemiştik. Türleri aynı olan ürünlerin tek bir yerden üretilmesini sağlayan bir çözümdü.
 
Soyut fabrika tasarımını anlamak için fabrika tasarımını iyi anlamamız gerekiyor. Soyut fabrika tasarımı fabrika tasarımında gerçekleşen ürün üretimi yerine ürünün üretildiği fabrikaları üretmeyi sağlar. Ne demek şimdi bu ? (Benim gibi bazı arkadaşlar ilk başta bunun anlamını anlamayabilir. Korkacak birşey yok arkadaşlar :))
 
Bir önceki örneğimiz de çikolata yapan fabrikadan bahsetmiştik. İstersek bu örnekten devam edebiliriz ama örnek çeşitliliği adına farklı bir örnek yapmanın daha iyi olacağı kanaatindeyim.
 
2 adet bilgisayar üretme fabrikamız olduğunu düşünelim. Bunların birbirini yiyen iki firma olsun mesela (çok düşünmeye gerek yok:)) Samsung ve Apple(Eşimin telefonu Apple benimki Samsung özgürlüğü tercih ettiğimi düşünüyorum :Pp). 
 
Biz Bir Laptop aldığımız da Laptopun kendisi ve çantası beraber geliyor. Bu fabrikaların amacı benim istediğim model laptop ve çantasını getirmesi. Samsung istiyorsam samsung laptop ve samsung çantam olsun  gb.
 
Bu kadar laf salatalığı yaptıktan sonra bir UML ile ne demek istediğimizi anlatalım.
 
Fabrika Sınıfları
 
Çanta Sınıfları
Laptop Sınıfları
 
Fabrika Kullanma ve Oluşturma Sınıfları
 
Arkadaşlar yukarıdaki uml diagramlarına bakarak şunları çıkartabiliriz.
 
  • Bilgisayar ve Çanta üreten fabrikalarımız ve bu fabrikaların üst sınıfı olan bir sınıfımız vardır.
  • Bilgisayarlar ILaptop arayüzünü implemente etmek zorundadırlar.
  • Çantalar IBag arayüzü implemente etmek zorundadır.
  • Kullanmak istediğimiz model bilgisayar için fabrika üreten bir sınıfımız vardır.
     
 
Kodlarımıza bakalım.
 
ILaptop Arayüzü
 
Apple Laptop Sınıfı
 
 
Samsung Laptop Sınıfı
 
IBag Arayüzü


Apple Çanta Sınıfı

Samsung Çanta Sınıfı
 
Fabrikalara Arayüz Sunan Soyut Sınıf

Fabrika Üreten Sınıf

Apple Fabrikası

Samsung Fabrikası

Bilgisar Almak İsteyen Sınıf
 
Arkadaşlar yukarıdaki kodlarımızı adım adım inceleyelim.
 
  1. Kullanılmak istenilen Laptop markası dışarıdan alınıyor.
  2. Alınan laptop markası fabrikaları üreten sınıfa gönderiliyor(FactoryComputer).
  3. FactoryComputer gelen modele göre ilgili fabrikayı oluşturup geri FactoryBase üst sınıfını gönderiyor.
  4. Kullanılmak istenilen Laptop ve Bag nesneleri için gönderilen sınıfın CreateBag ve CreateLaptop metodları çağrılıyor.
  5. Bu metodlar üst sınıf olan IBag ve ILaptop sınıflarını geriye döndürüyor.
     
Gördüğünüz gibi arkadaşlar fabrika oluşturmak da fabrika kullanmak da gayet basit. Tabiki iyileştirmeler yapılabilir.  Fabrika oluşturma işlemlerini if veya switchlerle kontrol edilmeyebilir. Modellerimiz için oluşturulan laptop ve çantaları biz tek tip yaptık. Bunlar çeşitlendirilebilir.
 
Bir yazının daha sonuna geldik. Bir sonraki yazıda buluşmak üzere :)

Hiç yorum yok:

Yorum Gönder