Abstract Factory Pattern

Creational design patterns kategorisinde bulunan ve çok kullanılan abstract factory design pattern konusunda yazacağım. Uzunca bir anlatımdan ziyade bu tasarım şablonu kullanılmış bir örnek göstereceğim. Kaynakça olarak paylaşacağım linkler detaylı olarak araştırmak için yeterli olacaktır.

 “Provide an interface for creating families of related or dependent objects without specifying their concrete classes.”

Birbiri ile ilişkili veya bağımlı nesneleri onların concrete (somut) sınıflarını oluşturmadan create edilmesini sağlıyor. Tasarım şablonunu uygulamak için  nesnelerin aynı abstract class veya interface ile oluşturulmuş olması gerekmektedir. Nesnelerin arayüzleri veya soyut yapıları ile ilgilendiği için yeni bir nesne eklemek nispeten kolaylaşıyor. Abstract factory sınıf uml yapısı gösterilmiştir;

abstract

 Bu tasarım desenini ev yapımını örnek alarak anlatacağım. Ev oluşturmak için Kapı, duvar ve çatı gibi sınıflar oluşturup bu sınıfları ev fabrikası soyut sınıfı üzerinde tanımlayarak, o soyut sınıfı kullanarak ev yaratılmaktadır.

  1- Kapı soyut sınıfı oluşturduk ve ondan türetilmiş 3 tane sınıf ürettik.

doorobject

2- Aynı şekilde duvar ve çatı için soyut sınıf ve onlardan türetilmiş sınıflar ürettik.

wallandroofobject

3- Evleri üreteceğimiz ev fabrikası soyut sınıfını oluşturduk. Bu soyut sınıfı içersinde kapı, duvar ve çatı sınıflarını üretmesi için soyut metod olarak tanımlama yaptık.

housefactory

4- Ev fabrikası soyut sınıfından 2 tane ev sınıfı (villa ve apartment) ürettik. Oluşturulan bu sınıfların içerisinde ev fabrikası soyut sınıfında üretilmiş soyut metodları override ile ezdik ve gerekli tanımlamaları yaptık.

5- Aşağıda bulunan estate sınıfı ev oluşturmak için kullanılır. Constructor içinde ev fabrikası, kapı, çatı ve duvar için kullanılacak sınıfların isimleri alınarak ev için uygun nesneler oluşturulmaktadır. Gerekli parametreler ile nesne oluşturmaları yapılıyor. Ardından oluşturulan ev tipi ve nesneler console.writeline ile ekrana basılacaktır.

 6- Öncelikle oluşturmak istediğimiz tipinin nesnesini oluşturuyoruz. Ardından ev oluşturma işlemi için estate sınıfı çağrılacaktır. Constructor içine gerekli parametreler yollanıyor. Bu parametreler tanımlanan ev nesnesi,kapı,çatı ve duvar isimleridir.

createabstraact

 7-  Ekran çıktısı aşağıda gösterildiği gibidir.

main

 

Ne zaman kullanmalıyız ?

  • Sistemin nesne üretiminden bağımsız olması gerektiği durumlarda,
  • Aynı arayüz veya soyut yapıdan oluşan bir sistem ise tercih edilebilir.

Kaynaklar:

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s