C# Factory Method Design Pattern
Fabrika Yöntemi tasarım kalıbını, farklı tipte pizza siparişi verme senaryosu üzerinden C# ile inceleyelim.
Arayüz (Interface):
İlk olarak, farklı tipte pizzaları temsil eden bir arayüz oluşturalım:
C#
interface IPizza
{
string Ad { get; }
string Malzemeler { get; }
double Fiyat { get; }
}
Somut Sınıflar (Concrete Classes):
Ardından, arayüzümüzü implemente eden somut pizza sınıflarımızı oluşturalım:
C#
class KaradenizPidesi : IPizza
{
public string Ad => "Karadeniz Pidesi";
public string Malzemeler => "Hamsi, soğan, biber";
public double Fiyat => 25.99;
}
class MarmarisPidesi : IPizza
{
public string Ad => "Marmaris Pidesi";
public string Malzemeler => "Kiymali, kaşarlı, biber";
public double Fiyat => 29.99;
}class Calzone : IPizza
{
public string Ad => "Calzone";
public string Malzemeler => "Sosis, mantar, peynir";
public double Fiyat => 27.99;
}
Fabrika Sınıfı (Factory Class):
Artık, hangi pizza türüne istinaden nesne üreteceğimizi belirleyen bir fabrika sınıfı oluşturabiliriz:
C#
class PizzaFactory
{
public IPizza SiparisPizza(string pizzaTipi)
{
switch (pizzaTipi.ToLower())
{
case "karadeniz":
return new KaradenizPidesi();
case "marmaris":
return new MarmarisPidesi();
case "calzone":
return new Calzone();
default:
throw new ArgumentException("Geçersiz pizza tipi!");
}
}
}Son olarak, fabrika sınıfımızı kullanarak pizza siparişi vermenin bir örneğini görelim:
C#
PizzaFactory factory = new PizzaFactory();
IPizza karadenizPidesi = factory.SiparisPizza("Karadeniz");
Console.WriteLine($"Sipariş Edilen Pizza: {karadenizPidesi.Ad}");
Console.WriteLine($"Malzemeler: {karadenizPidesi.Malzemeler}");
Console.WriteLine($"Fiyat: {karadenizPidesi.Fiyat:TL}");IPizza marmarisPidesi = factory.SiparisPizza("Marmaris");
Console.WriteLine($"\nSipariş Edilen Pizza: {marmarisPidesi.Ad}");
Console.WriteLine($"Malzemeler: {marmarisPidesi.Malzemeler}");
Console.WriteLine($"Fiyat: {marmarisPidesi.Fiyat:TL}");
Bu örnekte, PizzaFactory
sınıfı aracılığıyla farklı pizza türleri sipariş ediyoruz. Fabrika, sipariş edilen pizza tipine göre hangi somut pizza sınıfının oluşturulacağını belirliyor ve bu nesneyi geri döndürüyor.
Fabrika Yöntemi Kalıbının Faydaları:
- Bağlantı Gevşekliği (Loose Coupling): Sipariş veren kod, somut pizza sınıflarına bağlı değildir. Bu, kodun daha esnek ve test edilebilir olmasını sağlar.
- Esneklik: Yeni pizza türleri kolayca eklenebilir ve fabrika sınıfı buna göre güncellenebilir.
- Kod Yeniden Kullanımı: Fabrika mantığı, farklı pizza siparişi senaryolarında yeniden kullanılabilir.
Fabrika Yöntemi tasarım kalıbı, nesne oluşturma işlemini soyutlaştırarak kodunuzu daha esnek, yeniden kullanılabilir ve test edilebilir hale getirebilir.