Tasarım Desenleri : Abstract Factory

24 Ocak 2010 – 18:45

Bu desen Factory Method desenine çok benzer. Amaç yine aynıdır. Sistemden nesnelerin oluşma işini soyutlar. Abstract Factory benzer özellikleri olan nesne fabrikalarını gruplar. İçinde birden fazla fabrika vardır.
Örneğimizde birden fazla türde database’de kaydetme ve sorgulama işlemlerini gruplamak için soyut fabrikayı kullanıyoruz :
Kısaca kodlarına da bakalım :
Önce ürünlerimizin gerçek ve soyut sınıflarını yazıyoruz.
Kaydetme.cs

interface Kaydetme
{
void kaydet(string cumle);
}

SQLBaglanti.cs

class SQLBaglanti:Kaydetme
{

public void kaydet(string cumle)
{
MessageBox.Show(”sql’e kaydedildi”);
}


}

AccessBaglanti.cs

class AccessBaglanti:Kaydetme
{

public void kaydet(string cumle)
{
MessageBox.Show(”access’e kaydedildi”);
}


}

Komut.cs

interface Komut
{
void sorgula(string query);
}

SQLSorgu.cs

class SQLSorgu:Komut
{

public void sorgula(string query)
{
MessageBox.Show(”sql’de sorgu oluştu”);
}


}

AccessSorgu.cs

class AccessSorgu:Komut
{

public void sorgula(string query)
{
MessageBox.Show(”access’de sorgu oluştu”);
}


}

BaglantiFabrikası.cs

interface BaglantiFabrikası
{
Kaydetme kaydetmeİşiYap();
Komut sorgulamaİşiYap();
}

SQLFabrikası.cs

class SQLFabrikası : BaglantiFabrikası
{

public Kaydetme kaydetmeİşiYap()
{
return new SQLBaglanti();
}


public Komut sorgulamaİşiYap()
{
return new SQLSorgu();
}


}

AccessFabrikası.cs

class AccessFabrikası:BaglantiFabrikası
{

public Kaydetme kaydetmeİşiYap()
{
return new AccessBaglanti();
}


public Komut sorgulamaİşiYap()
{
return new AccessSorgu();
}


}

Fabrika.cs

class Fabrika
{

public BaglantiFabrikası fabrikaAl(string tip)
{

if (tip == “mssql”)
{
return new SQLFabrikası();
}
else if (tip == “access”)
{
return new AccessFabrikası();
}

}


}

ve kullanmak istediğimiz yer :

BaglantiFabrikası fab = new Fabrika().fabrikaAl(”mssql”);
Komut cmd = fab.sorgulamaİşiYap();
Kaydetme cn = fab.kaydetmeİşiYap();
(NOT: UML, Tasarım Desenleri sitesinden alınıp düzenlenmiştir.)

cmd.sorgula(”");
cn.kaydet(”");

return new SQLFabrikası();//if’lere girmez ise bu olacak

Bookmark and Share

Post a Comment

Subscribe without commenting