CodeBlanks Logo Icon CodeBlanks

Factory

C# kursu · İleri seviye · Ders 62/83

Factory deseniyle nesne oluşturma yöntemini öğrenirsin.

Factory deseni

Factory, nesne yaratma mantığını tek bir yerde toplar. İstemci hangi somut sınıfın üretileceğini bilmez; yalnızca bir arayüz (INotifier) üzerinden çalışır. Fabrika metodu bir parametreye bakarak doğru somut türü seçer ve döndürür.

Avantaj: yeni bir bildirim kanalı eklemek için yalnızca fabrikayı değiştirirsin; istemci kodu aynı kalır. Bu, açık-kapalı ilkesine (open-closed) uygundur: genişletmeye açık, değiştirmeye kapalı.

Fabrika metodu

Bir fabrika metodu, genellikle static olarak tanımlanır ve parametre olarak bir tür adı alır. Gövdede switch ifadesi doğru somut sınıfı seçer. Dönüş türü arayüzdür, bu yüzden istemci yalnızca INotifier görür.

Örnek: static INotifier Create(string type) => type switch { "sms" => new SmsNotifier(), "email" => new EmailNotifier(), _ => null };. Burada _ varsayılan durumu (default) yakalar.

Uygulama NotifierFactory oluştur

interface INotifier tanımla; string Send(string message) metodu olsun. SmsNotifier ve EmailNotifier sınıfları bu arayüzü uygulayıp "SMS: " + message ve "Email: " + message döndürsün. static class NotifierFactory içinde static INotifier Create(string type) metodu type parametresine göre doğru türü döndürsün ("sms" ve "email"). Main'de Create("sms") ile bir bildirici al ve Send("Merhaba") sonucunu yazdır.

Örnek çözümü göster
interface INotifier { string Send(string message); } tanımla. SmsNotifier ve EmailNotifier bu arayüzü uygulayan sınıflar olsun. static class NotifierFactory { public static INotifier Create(string type) => type switch { "sms" => new SmsNotifier(), "email" => new EmailNotifier(), _ => null }; } yaz. Main'de Console.WriteLine(NotifierFactory.Create("sms").Send("Merhaba"));
Örnek çözüm:
using System;

interface INotifier
{
    string Send(string message);
}

class SmsNotifier : INotifier
{
    public string Send(string message) => "SMS: " + message;
}

class EmailNotifier : INotifier
{
    public string Send(string message) => "Email: " + message;
}

static class NotifierFactory
{
    public static INotifier Create(string type) =>
        type switch
        {
            "sms" => new SmsNotifier(),
            "email" => new EmailNotifier(),
            _ => null
        };
}

class Program
{
    static void Main()
    {
        Console.WriteLine(NotifierFactory.Create("sms").Send("Merhaba"));
    }
}

Kendini test et

  1. Factory deseninin çözdiği sorun nedir?

    • Nesne yaratma kodunu gizler
    • Çalışma anında doğru somut türü seçer
    • Statik metodları zorunlu kılar
    • Arayüzleri kaldırır
    Cevabı göster

    Çalışma anında doğru somut türü seçer — Doğru. Factory bir parametreye bakarak doğru somut türü seçer.

  2. Somut sınıf örneği oluştur

    return ____ SmsNotifier();
    Cevabı göster
    return new SmsNotifier();
  3. Factory terimlerini eşleştir

    Creator
    Fabrika metodunu barındıran sınıf
    Product
    Üretilen nesnenin arayüzü
    ConcreteProduct
    Somut ürün sınıfı
    Client
    Fabrikayı çağıran kod

İleri seviye bölümündeki tüm dersler