Tasarım Desenleri Yazı Dizisi – Bölüm 1 – Abstract Factory (Soyut Fabrika)

Creational Patterns (Yaratıcı Tasarım Desenleri) grubu altında yer alan Abstract Factory tasarım deseni birbiri ile ilişkili nesnelerin oluşturulması sırasında istemcinin nesneler ile değil nesneleri üreten fabrikalar ile konuşmasını sağlayan tasarım desenidir.


Resim-1

Peki istemcinin nesne yerine nesneleri üreten fabrikalarla konuşması bizlere ne gibi fayda sağlamaktadır?

 

  • Tek bir üretici metod kullanılarak farklı nesne tipleri üretilebilir.
  • Desen içeriğine yazılan kodların değişmesi durumunda istemci tarafında yazılmış olan kodların değiştirilmesine gerek yoktur.
  • Nesne yerine üretici fabrika kullanılması nedeniyle desen içeriğine yeni nesne tipleri kolaylıkla eklenebilir.

 

Aslında Abstract Factory tasarım desenini kutu üreten bir işletmeye benzetebiliriz. Bu işletme çeşitli boy ve renklerde kutular üretmektedir. Fakat üretilen ürünlerin özellikleri farklı olmasına rağmen üretim esnasında aynı makine ve aynı elemanlar bulunmaktadır. Buna ek olarak sipariş veren müşteri üretim ile ilgili hiçbir bilgiye sahip değildir ve buna ihtiyacı da yoktur. Onun ihtiyacı olan tek şey sipariş vermiş olduğu kutunun üretim sonrası eline geçmesidir. İşte Abstract Factory tasarım deseni ile oluşturmuş olduğumuz sınıflarımızın kullanımında da istemcinin ihtiyacı olan tek bilgi nesnenin oluşturularak kullanıma sunulmasıdır.

Şimdi belirtmiş olduğumuz Kutu üreten işletmemizi ve işletmemize ait üretimi yapılan küçük ve Büyük kutu adlı 2 nesnemizi Abstract Factory Tasarım deseni ile tasarlayalım.

Kutularımız başlangıçta 2 adet ancak belki de daha sonradan farklı boyutlarda kutu üretimine de başlayabiliriz. Bu sebeple ilk olarak kutularımızın boyutlarını belirleyebileceğimiz sınıfımızı oluşturalım.


Resim-2

Kutularımızın boyutlarını belirleyebileceğimiz sınıfımızı her kutumuza ait kullanılacak boyut bilgileri farklı olabileceği için Abstract sınıf olarak tanımladık.

Her üretilecek kutunun da rengi farklı olabilir değil mi? Bunun için kutu renklerimizi belirleyebileceğimiz sınıfımızı da Abstract olarak tanımlayalım.


Resim-3

Artık işletmemize ait üretilebilecek Kutu tiplerimizi tanımlayabiliriz. Kutu tiplerimizi tanımlarken her kutunun özellikleri arasında farklı boyut ve renk olabileceğinden kutularımıza ait sınıflarımızı Boyut ayarlar ve Renk Ayarlar sınıflarından türetmemiz gereklidir.


Resim-4


Resim-5


Resim-6

İşletmemize ait üretilebilecek kutu tiplerini tanımladığımıza göre sıra üretim aşamasında yapılacak işlemlere geldi.


Resim-7

Üretim aşaması basit olarak boyutlandırma ve renklendirme olarak iki aşamadır. Bu durumda her yeni kutu üretim talebinde bu işlemler yeniden yapılacağından kutularımızı Uretim aşaması sınıfından türetmeliyiz.


Resim-8

İşleyiş ile ilgili tüm tanımlamaları yaptığımıza göre artık üretime geçebiliriz. Üretim sürecinde bize lazım olanlar üretilecek kutunun tipi ,boyutları ve rengidir. Bu bilgilerden tip verisini siparişin (nesnenin) oluşturulması aşamasında boyut ve renk bilgilerini ise uretim işlemine ait metodun çalıştırılması sırasında alıyoruz.


Resim-9

Artık tek yapmamız gereken siparişin gelmesini (istemci talebini) beklemektir.


Resim-10

Gördüğünüz gibi istemci tarafından oluşturulan nesnenin nasıl oluştuğu yada oluşması aşamasında hangi adımlardan geçtiğinin hiçbir bilgisi bulunmamakta. İstemcide yapılan sadece nesne üretme ve üretilecek nesneye ait özelliklerin belirlenmesi sonrası üretime başlanmasının talebidir.

Bu sayede biz desenimiz içeriğine ortaboy kutu, yuvarlak kutu vb.. kutu tipleri eklediğimiz de istemci tarafında var olan kodlarda hiçbir değişiklik olmayacak ancak talebe göre yeni eklenen tiplerden nesne üretimi yapılacaktır.

Bu makalede kullanılan tasarım desenine ait kodu indirmek için buraya tıklayın. Dosyanın şifresi mshowto.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Yazı gezinmesi

Mobil sürümden çık