Creational Design Patterns > ProtoType Design Pattern
Hap bilgidir.
İşletmeler’den çıkan ürün/ hizmet sonrasında kesilen faturalar gibi düşünebilirsiniz. Faturalarda tarih, satıcı, alıcı, ürün, KDV, toplam, fatura seri no bilgileri yer alır. Faturayı hazırlayan kişi de bir yaprak koparıp şablondaki boşlukları doldurur. “ProtoType Design Pattern” böyle çalışıyor. Örnekte inceleyelim.
Teorik bilgi:
Hangi durumlarda kullanılır: Bir şablon oluşturup o şablonu tekrar tekrar farklı değerlerle kullanmak istediğimiz durumlarda kullanılır.
Hangi durumlarda kullanılmaz: Kullanımı açık ve genişeltilebilirdir. Kullanılmadığı durum yoktur ancak şablon içeriğine sığmayan işlemler için kullanışsızdır.
Örnek Uygulama:
//FaturaGenel.cs namespace ProtoTypeDesignPatternExample { abstract class FaturaGenel { public DateTime faturaTarihi { get; set; } public int seriNo { get; set; } public string satici { get; set; } public string alici { get; set; } public List<string> urunler { get; set; } public double toplam { get; set; } public double KDV { get; set; } public abstract FaturaGenel Clone(); } }
//Fatura.cs namespace ProtoTypeDesignPatternExample { class Fatura:FaturaGenel { public override FaturaGenel Clone() { return (FaturaGenel)this.MemberwiseClone(); } } }
namespace ProtoTypeDesignPatternExample { public partial class Form1 : Form { Fatura FaturaStd; int faturaSeriNo = 1; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { FaturaStd = new Fatura() { faturaTarihi = DateTime.Today, seriNo = 000, alici = "Ahmet Emin", satici = "Boran", urunler = new List<string> { "Klavye", "Mouse" }, KDV = 0.18, toplam = 60.00 }; MessageBox.Show(FaturaStd.faturaTarihi.ToString() + "\n" + FaturaStd.seriNo + "\n" + FaturaStd.alici + "\n" + FaturaStd.satici + "\n" + FaturaStd.urunler[0] + "\n" + FaturaStd.KDV + "\n" + FaturaStd.toplam); } private void btnFaturaHazirla_Click(object sender, EventArgs e) { FaturaGenel fatura1 = FaturaStd.Clone(); fatura1.seriNo = faturaSeriNo; faturaSeriNo++; MessageBox.Show(fatura1.faturaTarihi.ToString() + "\n" + fatura1.seriNo + "\n" + fatura1.alici + "\n" + fatura1.satici + "\n" + fatura1.urunler[0] + "\n" + fatura1.KDV + "\n" + fatura1.toplam); } } }
bu düzeni normal “class” tanımlayarak da yapabilirdik, neden zahmet ettik bu kadar şeye?
29. satırdaki “FaturaGenel fatura1 = FaturaStd.Clone();” tanımlamasını yapamazdık, bu kod yeni kopyada eski verilerin kullanılmasını istediğimizde işe yarıyor, ve istediğimiz örnekten kopyalama rahatlığı verdiği için bir esneklik sağlamış oluyor.
Konu hakkında Pratik1 başlığındaki çalışmayı da inceleyebilirsiniz.