C#'ta Abstract Factory Design Pattern'in Kullanımı

Bu derste C#'ta abstract factory tasarım kalıbının kullanılması konusuna değinelim.

Abstract Factory: Creational Pattern Gurubunda yer alır. Soyut fabrika üretim yapılarının oluşturulması ve aralarında ilişki bulunan nesnelerin soyut fabrika yapıları aracılığı ile üretimi ele alınmaktadır. İstemciler tiplerine göre farklı fabrikaları kullanıp seçebilir. İstemcinin ihtiyacı farklı fabrikalar tarafından ele alınıp işlenerek ürünler oluşturulur.

AbstractFactory: ConcreteFactory tipinin şablonu. Soyut fabrika.

ConcreteFactory: Asıl Fabrika

AbstractProduct: Product tipinin şablonu. Soyut ürün.

Product: Asıl Ürün

Client: İstemci uygulamanın ulaştığı ara katman. Soyut Fabrika nesnesi üzerinden ürün üretir. Nesnenin üretiminden AbstractFactory arayüzünü uygulayan ConcreteFactory tipi sorumludur.

Ürün AbstractProduct arayüzü uygulayan Product tipidir. Üretici ise client uygulamadır.

Soyut Fabrika tipi (Abstract Factory) 2 metod içermektedir. Bunlar A ve B tipli ürünlerin üretimini sağlayan Create metodlarıdır.Asıl Fabrikalar (ConcreteFactory) Abstract Factory tipini uygularlar. Ve bu tipi uygulamaları ile A ve B tipli Create metodlarını içlerinde bulundurmaları gerekmektedir. Bu metotlar soyut ürün tipinden (AbstractProduct) geri dönüş değerine sahiptir. 2 Soyut ürün yapısı AbstractProductA ve AbstractProductB oluşturulmuş bu yapılar diğer sınıflar tarafından uygulanmıştır. Son olarak çalıştırma aşamasında Soyut Fabrikalar oluşturulmuş ve client üzerine parametre geçilmiş ve çalıştırılmıştır.

namespace ConsoleApplication1

{

// Abstract Factory

abstract class AbstractFactory

{

public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductB();

}


// ConcreteFactory1

class ConcreteFactory1 : AbstractFactory

{

public override AbstractProductA CreateProductA()

{

return new ProductA1();

}

public override AbstractProductB CreateProductB()

{

return new ProductB1();

}

}


// ConcreteFactory2

class ConcreteFactory2 : AbstractFactory

{

public override AbstractProductA CreateProductA()

{

return new ProductA2();

}

public override AbstractProductB CreateProductB()

{

return new ProductB2();

}

}


// AbstractProductA

abstract class AbstractProductA

{

}


// AbstractProductB

abstract class AbstractProductB

{

public abstract void Interact(AbstractProductA a);

}


// ProductA1

class ProductA1 : AbstractProductA

{

}


// ProductB1

class ProductB1 : AbstractProductB

{

public override void Interact(AbstractProductA a)

{

Console.WriteLine(this.GetType().Name +

" interacts with " + a.GetType().Name);

}

}


// ProductA2

class ProductA2 : AbstractProductA

{

}


// ProductB2

class ProductB2 : AbstractProductB

{

public override void Interact(AbstractProductA a)

{

Console.WriteLine(this.GetType().Name +

" interacts with " + a.GetType().Name);

}

}


// Client class Client

{

private AbstractProductA _abstractProductA; private AbstractProductB _abstractProductB;


public Client(AbstractFactory factory)

{

_abstractProductB = factory.CreateProductB();

_abstractProductA = factory.CreateProductA();

}


public void Run()

{

_abstractProductB.Interact(_abstractProductA);

}

}


class Program

{

public static void Main()

{

AbstractFactory factory1 = new ConcreteFactory1(); Client client1 = new Client(factory1); client1.Run();


AbstractFactory factory2 = new ConcreteFactory2(); Client client2 = new Client(factory2); client2.Run();


Console.ReadKey();

}

}

}

 

Ozan Dalbudak
Merhaba,1995 doğumluyum. 2009 yılında lisede veritabanı Programcılığı bölümünü kazanarak kariyerime başlamış oldum. Daha sonra Selçuk Üniversitesi'nde Bilgisayar Mühendisliği okuyorum.
Yorum Yaz

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

Yukarı Git