Yaratımsal tasarım kalıplarından olan fabrika metodu nesnenin nasıl yaratılacağını kalıtım yoluyla alt sınıflara bırakıp nesne yaratımı için tek ara yüz kullanarak, ara yüzle nesne yaratım işlevlerini temelde birbirinden ayırmaya yarayan yaratımsal tasarım desenidir. En kolay anlatımı ile oluşturulan fabrika yapısındaki bilgiye bağlı olarak, çok sayıdaki benzer sınıflar arasından doğru seçimi yapıp gereken nesnenin yaratılmasını sağlar. Fabrika tasarım kalıbının temel yapısı aşağıdaki şekildedir.
Konunun daha açıklayıcı olması için "Fabrika Tasarım Kalıbı" kullanılan örnek bir program şu şekilde yazılır. Programda, kullanıcıdan ad ve soyad girilmesi istenir. Kullanıcı bu girişi iki farklı şekilde yapabiliyor olsun. Bu iki format ( İsim Soyisim ve Soyisim, İsim ) şeklinde belirlenir. Kullanıcıdan farklı formatlarda aldığımız tam (ad+soyad) isimden ad ve soyad bilgileri elde edilir.
Belirlenen senaryoya göre; ad ve soyad bilgilerine sahip TamIsim adında bir sınıf oluşturulsun. TamIsim sınıfının ad ve soyad değişkenleri üst sınıfların da erişebilmesi için protected olarak belirlenir.
public class TamIsim
{
protected string ad, soyad;
public string adGetir()
{
return ad;
}
public string soyadGetir()
{
return soyad;
}
} |
İki farklı formatta isim girişi yapılacağı için her bir format için
TamIsim sınıfından türetilmiş farklı sınıflar aşağıdaki şekilde yazılır. "İsim Soyisim" şeklinde girilen bilgi için oluşturulan sınıfa
BoslukluIsim adı verilmiştir. Kodlardan da anlaşılacağı üzere sınıf, yapıcısında
string bir değişken almaktadır. Bu değişken İsim Soyisim formatındaki tam ismi içermektedir. Sonrasında ise aradaki boşluk yardımı ile ad ve soyad bilgileri elde edilir. Ardından da miras aldığı ad ve soyad üyelerine elde edilen bu değerler atanır.
public class BoslukluIsim : TamIsim
{
public BoslukluIsim(string isim)
{
int i = isim.IndexOf(" ");
if (i > 0)
{
ad = isim.Substring(0, i).Trim();
soyad = isim.Substring(i + 1).Trim();
}
else
{
soyad = isim;
ad = "";
}
}
} |
Soyisim, İsim şeklinde girilen bilgi için oluşturulan sınıfa
VirgulluIsim adı verilmiştir. Sınıf, diğer sınıfa benzer şekilde
string yapıcısı sayesinde girilen değişik formattaki ismi alır. Sonrasında aradaki virgül kullanılarak ad ve soyad bilgileri elde edilir. En sonunda ise miras alınan ad ve soyad üyeleri elde edilen bilgilerle doldurulur.
public class VirgulluIsim : TamIsim
{
public VirgulluIsim(string isim)
{
int i = isim.IndexOf(",");
if (i > 0)
{
soyad = isim.Substring(0, i);
ad = isim.Substring(i + 1).Trim();
}
else
{
soyad = isim;
ad = "";
}
}
} |
Kullanıcı, hangi formatta bilgi giriş yaparsa yapsın
TamIsim sınıfından bir nesne yaratan sınıfa da
IsimFabrikasi adı verilmiştir. Kodlardan da anlaşılacağı üzere sınıf, string tipinde parametre alan
TamIsim tipinde nesne döndüren
getirIsim adında bir metoda sahiptir. Alınan parametre, içinde virgül olup olmama durumuna göre uygun sınıfın yapıcısına yönlendirilerek
TamIsim sınıfından bir nesne yaratılır.
public class IsimFabrikasi
{
public IsimFabrikasi() { }
public static TamIsim getirIsim(string isim)
{
int i = isim.IndexOf(",");
if (i > 0)
{
return new VirgulluIsim(isim);
}
else
{
return new BoslukluIsim(isim);
}
}
} |
Son olarak da aşağıdaki kodlar ile her iki formatta da programın ara yüzünden alınan bilgiler ışığında TamIsim sınıfından nesne üretilip, nesneden ad ve soyad bilgileri elde edilir.
private void btnGetir_Click(object sender, EventArgs e)
{
TamIsim isim = IsimFabrikasi.getirIsim(txtTamIsim.Text);
txtAd.Text = isim.adGetir();
txtSoyad.Text = isim.soyadGetir();
} |
Aşağıdaki ekran çıktılarında, tam ismin farklı iki formatta girildiği ve aynı sonucun elde edildiği örnek programın ekran görüntüleri görülmektedir. Tam isim, üstteki pencerede boşluk kullanılarak, alttaki pencerede ise virgül kullanılarak girilmiş ve her iki pencerede de ad ve soyad değerleri fabrika tasarım kalıbı ile yaratılan isim nesnesinden elde edilmiştir.