Gerçek dünyası senaryosu 1 : Bir genel müdürün Developer işe alacağını düşünelim. Genel müdür developer işe alacak yani programlama açısından yaratacaktır. Porgramatik açıdan ile genel müdür, developer yaratacak olan fabrika metodunu sahibi olacaktır. Kod'un mantığı : Genel Müdür factory method'u üzerinde tutar. İşe alım yapacak(developer yaratacak) olan bu kişi(Genel Müdür) fabrika metoduna sahip olacak olan nesnedir. İşe alım yapacak olan kişi "Genel Müdür"dür. Bu yüzden "Genel Müdür" fabrika metodunu kendi üstünde tutar. Yazılım Örneği İlk başta çalışan yapımızı kuralım : public interface Calisan {     void DoSomeWork(); } public class Developer : Calisan {     public void DoSomeWork()     {         System.Console.WriteLine("Kodlar yazılıyor");     } } Factory Method'u kodlayalım : public abstract class HireManager {     //Factory Method     public abstract Calisan IseAlimYap(); } public class SirketMuduru : HireManager { //Factory Method     public Calisan IseAlimYap()     { return new Developer();     } } Client Kodu : var mudur = new SirketMuduru(); var developer = mudur.IseAlimYap(); Ne zaman kullanılı? Client'ın nesne yaratma sorumluluğunu başka bir nesneye akatarmasını istediği zaman kullanır. Gerçek dünya senaryosu 2 : Bir genel müdürün Developer ve/veya Analist işe alacağını düşünelim. Genel Müdür işe alacağı kişilerin pozisyonuna bağlı olarak kişiyi seçmesi gerekir. İşe alım yapacak(işçi yaratacak) olan bu kişi fabrika metoduna sahip olacak olan nesnedir. Kod'un mantığı Factory Method'da hangi nesnenin yarataılacağına karar veren "Genel Mudur"dür çünkü işe alımdan sorumlu tutacağı kişinin bilgisi ve işe alınacak pozisyonun bilgisi tutar. GenelMüdürün bilmesi gereken tek şey işe alım yapacağı pozisyon ve işe alım yapacak kişinin bilgisidir. Bu bilgilere göre işçi alacaktır(yaratacaktır). Pozison bazında işe alınacak kişinin seçildiği(yaratıldığı) metoda FactoryMetodu denir. Örneğimizde işe alma sorumluluğu olan, soyut sınıf olan ,HireManager'ın abstract olarak işaretlenen factory metodunun, alt sınıflarda(derived/child sınıflarda) spesifik bir pozisyondan işe alınacak olan çalışan örneklenmesini sağlayan metoda fabrika metodur denir. Factory method HireManager'ların üzerindedir. Factory metot Calisan yaratır(create eder). Genel Müdür aynı zamanda bir HireManager'dır. Yazılım Örneği İlk başta çalışan yapımızı kuralım : public interface Calisan {     void DoSomeWork(); } public class Developer : Calisan {     public void DoSomeWork()     {         System.Console.WriteLine("Kodlar yazılıyor");     } } public class Analist : Calisan {     public void DoSomeWork()     {         System.Console.WriteLine("Analiz yapılıyor.");     } } Factory Method'ı kodlayalım : public abstract class HireManager {     //Factory Method     public abstract Calisan IseAlimYap(CalisanTipi calisanTipi); } public class SirketMuduru : HireManager { //Factory Method     public Calisan IseAlimYap(CalisanTipi calisanTipi)     {         Calisan calisan = null;         if (calisanTipi == CalisanTipi.Developer)         {             calisan = new Developer();         }         if (calisanTipi == CalisanTipi.Analist)         {             calisan = new Analist();         }         return calisan;     } } public enum CalisanTipi {     Developer,     Analist } Client Kodu : var mudur = new SirketMuduru(); mudur.IseAlimYap(CalisanTipi.Analist); Ne zaman kullanılmalı ? Eğer calisma zamanında (runtime'da) client hangi sınıfı yaratmak isteyeceğini bilmiyorsa fabrika metotları yararlı olabilir. Aynı zamanda nesne yaratmayı client'tan alıp factory method'a yüklendiğinden, client kodunda sadeleşmede de sağlar, temiz kod (clean code) yazılmasına yardımcı olur.

Apr 13, 2025 - 19:23
 0

Gerçek dünyası senaryosu 1 :

Bir genel müdürün Developer işe alacağını düşünelim. Genel müdür developer işe alacak yani programlama açısından yaratacaktır. Porgramatik açıdan ile genel müdür, developer yaratacak olan fabrika metodunu sahibi olacaktır.

Kod'un mantığı :

Genel Müdür factory method'u üzerinde tutar.
İşe alım yapacak(developer yaratacak) olan bu kişi(Genel Müdür) fabrika metoduna sahip olacak olan nesnedir. İşe alım yapacak olan kişi "Genel Müdür"dür.
Bu yüzden "Genel Müdür" fabrika metodunu kendi üstünde tutar.

Yazılım Örneği
İlk başta çalışan yapımızı kuralım :

public interface Calisan
{
    void DoSomeWork();
}

public class Developer : Calisan
{
    public void DoSomeWork()
    {
        System.Console.WriteLine("Kodlar yazılıyor");
    }
}

Factory Method'u kodlayalım :


public abstract class HireManager
{
    //Factory Method
    public abstract Calisan IseAlimYap();
}

public class SirketMuduru : HireManager
{
    //Factory Method
    public Calisan IseAlimYap()
    {
        return new Developer();
    }
}

Client Kodu :

var mudur = new SirketMuduru();
var developer = mudur.IseAlimYap();

Ne zaman kullanılı?
Client'ın nesne yaratma sorumluluğunu başka bir nesneye akatarmasını istediği zaman kullanır.

Gerçek dünya senaryosu 2 :

Bir genel müdürün Developer ve/veya Analist işe alacağını düşünelim. Genel Müdür işe alacağı kişilerin pozisyonuna bağlı olarak kişiyi seçmesi gerekir.
İşe alım yapacak(işçi yaratacak) olan bu kişi fabrika metoduna sahip olacak olan nesnedir.

Kod'un mantığı

  • Factory Method'da hangi nesnenin yarataılacağına karar veren "Genel Mudur"dür çünkü işe alımdan sorumlu tutacağı kişinin bilgisi ve işe alınacak pozisyonun bilgisi tutar.
  • GenelMüdürün bilmesi gereken tek şey işe alım yapacağı pozisyon ve işe alım yapacak kişinin bilgisidir. Bu bilgilere göre işçi alacaktır(yaratacaktır). Pozison bazında işe alınacak kişinin seçildiği(yaratıldığı) metoda FactoryMetodu denir.

Örneğimizde işe alma sorumluluğu olan, soyut sınıf olan ,HireManager'ın abstract olarak işaretlenen factory metodunun, alt sınıflarda(derived/child sınıflarda) spesifik bir pozisyondan işe alınacak olan çalışan örneklenmesini sağlayan metoda fabrika metodur denir.

Factory method HireManager'ların üzerindedir. Factory metot Calisan yaratır(create eder). Genel Müdür aynı zamanda bir HireManager'dır.

Yazılım Örneği
İlk başta çalışan yapımızı kuralım :

public interface Calisan
{
    void DoSomeWork();
}

public class Developer : Calisan
{
    public void DoSomeWork()
    {
        System.Console.WriteLine("Kodlar yazılıyor");
    }
}

public class Analist : Calisan
{
    public void DoSomeWork()
    {
        System.Console.WriteLine("Analiz yapılıyor.");
    }
}

Factory Method'ı kodlayalım :


public abstract class HireManager
{
    //Factory Method
    public abstract Calisan IseAlimYap(CalisanTipi calisanTipi);
}

public class SirketMuduru : HireManager
{

    //Factory Method
    public Calisan IseAlimYap(CalisanTipi calisanTipi)
    {
        Calisan calisan = null;
        if (calisanTipi == CalisanTipi.Developer)
        {
            calisan = new Developer();
        }
        if (calisanTipi == CalisanTipi.Analist)
        {
            calisan = new Analist();
        }
        return calisan;
    }
}
public enum CalisanTipi
{
    Developer,
    Analist
}

Client Kodu :

var mudur = new SirketMuduru();
mudur.IseAlimYap(CalisanTipi.Analist);

Ne zaman kullanılmalı ?
Eğer calisma zamanında (runtime'da) client hangi sınıfı yaratmak isteyeceğini bilmiyorsa fabrika metotları yararlı olabilir.
Aynı zamanda nesne yaratmayı client'tan alıp factory method'a yüklendiğinden, client kodunda sadeleşmede de sağlar, temiz kod (clean code) yazılmasına yardımcı olur.