C# Factory Method Design Pattern

AhmetKürşadYILDIZ
2 min readMay 14, 2024
C# ile Fabrika Yöntemi Tasarım Kalıbı Örneği

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.

--

--