C#'ta Factory Method Pattern Kullanımı

Bu derste C#'ta Factory Method Pattern kullanımını göreceğiz.

Creational Pattern Gurubu içerisinde yer alır. İstemcilerin talep ettikleri nesneleri oluşturmak için bir fabrika metodundan faydalınılır. Nesnenin nasıl yaratılacağı kalıtım yoluyla alt sınıflara bırakılır. İstemci kullanacağı asıl ürün nesnesinin nasıl üretileceği konusunda bir bilgiye sahip değildir. Nesne nasıl üretilir ne aşamalardan geçer şimdiki durum ve gelecekteki durum bunlarla ilgilenmez sadece nesne talep eder. Nesnenin üretim aşamasını client'dan saklanmış olur. Nesne üretim aşamasında meydana gelen bir değişiklik istemci uygulamadan izole edilir ve istemci uygulama bu değişimden etkilenmez.

Bu metodlar nesne üreten metotlar olduğundan metod çağrıldığında bir sınıftan türetilmiş bir nesne geri döndürmesi gerekir.

  1. Kullanım: Client creator tipinden bir nesnenin factory metodu ile Concrete Product sınıfından bir nesne üretir.
  • Product: İstemcinin talep ettiği nesnenin tipi. Üretilecek ürünlerin şablonu. Interface yada abstract class
  • Concrete Product: Asıl nesne. Product arayüzünü uygular.
  • Creator: Nesne üretimi ile ilgili işlemi yerine getiren, Client uygulamanın taleplerini karşılayan ve uygun ürünü sunan yapı. Nesne üreten Factory Metot bu yapı içerisinde yer alıyor.
  • Client:  İstemci uygulama.

2.Kullanım: Client creator tipinden nesne üreterek concrete creator tipleri içerisindeki factory metotları çağırarak nesne elde eder. Diğer yapılar aynı kalıp şu iki yapı değişiklik gösterir.

  • Creator: ConcreteCreator tiplerinin uygulayacağı şablon. Abstract Class yada Interface.
  • Concrete Creator: Nesne üretimi ile ilgili işlemi yerine getiren, Client uygulamanın taleplerini karşılayan ve uygun ürünü sunan yapı. Factory Method bu yapı içerisinde yer alır.
namespace ConsoleApplication1

{

public enum Ulkeler

{ Turkiye, Ispanya, Amerika }


// Product

public abstract class Product

{

public abstract void Konus();

}


// ConcreteProduct

public class ConcreteProduct1 : Product

{

public override void Konus()

{

Console.WriteLine("Türkiye için üretilen nesne Merhaba Dünya

diyor...");

}

}


// ConcreteProduct

public class ConcreteProduct2 : Product

{

public override void Konus()

{

Console.WriteLine("İspanya için üretilen nesne Hola Mundo

diyor...");

}

}


// ConcreteProduct

public class ConcreteProduct3 : Product

{

public override void Konus()

{

Console.WriteLine("Amerika için üretilen nesne Hello World

diyor...");

}

}


public class Creator

{

public Product FactoryMethod(Ulkeler ulke)

{

Product product = null;


switch (ulke)

{

case Ulkeler.Turkiye:

product = new ConcreteProduct1(); break;

case Ulkeler.Ispanya:

product = new ConcreteProduct2(); break;

case Ulkeler.Amerika:

product = new ConcreteProduct3(); break;

default:

break;

}


return product;

}

}


// Client class Program

{

static void Main()

{

Creator creator = new Creator();


Product product1 = creator.FactoryMethod(Ulkeler.Turkiye); Product product2 = creator.FactoryMethod(Ulkeler.Ispanya); Product product3 = creator.FactoryMethod(Ulkeler.Amerika);


product1.Konus(); product2.Konus(); product3.Konus();


Console.ReadKey();

}

}

}

2.Kullanım Örneği


namespace ConsoleApplication1

{

public enum Ulkeler

{ Turkiye, Ispanya, Amerika}


// Product

public abstract class Product

{

public abstract void Konus();

}


// ConcreteProduct

public class ConcreteProduct1 : Product

{

public override void Konus()

{

Console.WriteLine("Türkiye için üretilen nesne Merhaba Dünya

diyor...");

}

}


// ConcreteProduct

public class ConcreteProduct2 : Product

{

public override void Konus()

{

Console.WriteLine("İspanya için üretilen nesne Hola Mundo

diyor...");

}

}


// ConcreteProduct

public class ConcreteProduct3 : Product

{

public override void Konus()

{

Console.WriteLine("Amerika için üretilen nesne Hello World

diyor...");

}

}


public abstract class Creator

{

public abstract Product FactoryMethod();

}


public class ConcreteCreator1 : Creator

{

public override Product FactoryMethod()

{

return new ConcreteProduct1();

}

}


public class ConcreteCreator2 : Creator

{

public override Product FactoryMethod()

{

return new ConcreteProduct2();

}

}


public class ConcreteCreator3 : Creator

{

public override Product FactoryMethod()

{

return new ConcreteProduct3();

}

}


// Client class Program

{

static void Main()

{

Creator[] creators =  { new ConcreteCreator1(), new ConcreteCreator2(),

new ConcreteCreator3()};


foreach (Creator creator in creators)

{

Product product = creator.FactoryMethod(); product.Konus();

}

Console.ReadKey();

}

}

}

Ekran Çıktısı (Her iki kullanım örneği için)

  • Türkiye için üretilen nesne Merhaba Dünya diyor...
  • İspanya için üretilen nesne Hola Mundo diyor...
  • Amerika için üretilen nesne Hello World diyor...
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git