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?
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ı http://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.
Referanslar
1981 İstanbul doğumlu Erkan KİLMEN. Programlamayla ilk olarak 2002 Yılında Visual Basic ile başlamıştır. Daha sonrasında bu dilin kendisine yetersiz olduğunu düşünerek Visual C++ ile programlama bilgisini daha ileriye taşımıştır. 2004 yılında .NET teknolojisiyle tanışmış ve bu dile merak sarmıştır. Halen Microsoft'un yeni vizyonu olan .NET teknolojileri üzerine çalışmalarını sürdürmektedir.