Creational Patterns (Yaratıcı Tasarım Desenleri) grubu altında yeralan Factory Metod tasarım deseni birbirinden farklı ancak aynı grup altında toplayabileceğimiz nesnelerin isteğe bağlı olarak birleşmesi ile yeni bir nesne üretilmesini sağlamaktadır.
Bu durumu şu şekildeki bir senaryo ile daha kolay kavrayabiliriz.
Elimizde aşağıdaki malzemelerimizin olduğunu düşünelim.
• Un
• Şeker
• Yağ
• Yumurta
• Krema
• Meyve
• Kakao
Bu malzemeler ile yapabileceğimiz ürünleri düşünürsek basit olarak;
• Helva
• Kek
• Meyveli Pasta
• Kakaolu Pasta
ürünlerini üretebiliriz.
Şimdi elimizde bir makinamız olduğunu düşünelim ve bu makinamıza ait bölmelere bu malzemelerimizi ekleyelim. Artık makinamızın üzerinde bulunan ürün düğmelerine bastığımızda bu makinamız otomatik olarak bu malzemeleri kullansın ve seçmiş olduğumuz ürünü üretsin.
İşte Factory Metod Tasarım deseni tam olarak bu makinanın görevini üstlenmektedir.
Şimdi belirtmiş olduğumuz bu makinamızı Factory Metod Tasarım Deseni ile tasarlayalım. İlk yapmamız gereken Ürünlerimizi oluşturacak nesnelere ait ortak tip tanımını yapmak olacaktır.
public abstract class Malzeme { public abstract string Msg { get; } public override string ToString() { return this.Msg; } } |
Ortak tip tanımımızı yaptıktan sonra ürünlerimizi oluşturacak olan elimizdeki malzemelerin tanımlarını yapabiliriz.
public class Un:Malzeme { public override string Msg { get { return "Un Malzemesi Temin Edildi"; } } } public class Seker:Malzeme { public override string Msg { get { return "Seker Malzemesi Temin Edildi"; } } } public class Yag:Malzeme { public override string Msg { get { return "Yag Malzemesi Temin Edildi"; } } } public class Yumurta:Malzeme { public override string Msg { get { return "Yumurta Malzemesi Temin Edildi"; } } } public class Krema:Malzeme { public override string Msg { get { return "Krema Malzemesi Temin Edildi"; } } } public class Meyve : Malzeme { public override string Msg { get { return "Meyve Malzemesi Temin Edildi"; } } } public class Kakao:Malzeme { public override string Msg { get { return "Kakao Malzemesi Temin Edildi"; } } } |
Malzemelerimizin tanımını yaptıktan sonra artık ürünlerimizin oluşturmasını sağlayacak işlem tanımını gerçekleştirebiliriz.
public abstract class Urun { public Urun() { UrunOlustur(); foreach (Malzeme item in Malzemeler) { Console.WriteLine(item.Msg); } } public List Malzemeler { get; set; } public abstract void UrunOlustur(); } |
Ürün üretilmesini sağlayan işlemimizi tanımladıktan sonra sıra üretim yapılacak ürünlerimize geldi.
public class Helva:Urun { public override void UrunOlustur() { Malzemeler = new List { new Un(), new Seker(), new Yag() }; Console.WriteLine("Helva Üretim"); } } public class Kek:Urun { public override void UrunOlustur() { Malzemeler = new List { new Un(), new Seker(), new Yag(), new Yumurta() }; Console.WriteLine("Kek Üretim"); } } public class Meyveli_Pasta : Urun { public override void UrunOlustur() { Malzemeler = new List { new Un(), new Seker(), new Yag(), new Yumurta(), new Meyve(), new Krema() }; Console.WriteLine("Meyveli Pasta Üretim"); } } public class Kakaolu_Pasta : Urun { public override void UrunOlustur() { Malzemeler = new List { new Un(), new Seker(), new Yag(), new Yumurta(), new Kakao(), new Krema() }; Console.WriteLine("Kakaolu Pasta Üretim"); } } |
Ürünlerimizin tanımlamaları da bittikten sonra artık ürünlerimizi üretme işlemini gerçekleştirebiliriz.
Bunun için gerekli olacak tek şey istemci tarafından hangi ürünü üreteceğimizin belirlenmesidir. Tasarım desenimiz belirlemiş olduğumuz ürün içeriğinde kullanılan malzemeleri hazırlayarak ürünün oluşturma işlemini gerçekleştirecektir.
class Program { static void Main(string[] args) { Helva hv=new Helva(); } } |
Hazırladığımız tasarım desenimize yeni malzeme ve yeni ürün ekleme işleminde İstemci tarafındaki kodda hiçbir değişiklik yapmamıza gerek yoktur. Tek yapmamız gereken Yeni eklediğimiz ürünün üretilmesini talep etmek amacıyla ürüne ait sınıftan yeni bir nesne oluşturma isteği gerçekleştirmektir.
Bu makalede kullanılan tasarım desenine ait kodu indirmek için ………..