Profesyonel Tasarım Desenleri ; Prototype


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication19
{

//Prototype Kalıbında degistirmek istedigimiz sınıf üyelerini abstract yaparak ise baslıyoruz,bu sınıf diger sınıflarımız icin ornek ve temel
// özellikleri tasıyıcak ve ayrıca OOP temel kuralına uygun olarak üst sınıflarımıza esneklik sağlıyacak.
//Amaç tek eposta şablonundan farklı durumlar icin epostalar üretmek bunu yaparken new anahtarını kullanmamak zira
// refrans degerler her zaman heap üzerinde masraflı olarak üretilir ve tutulurlar object sınıfının MemberwiseClone üyesi
//new kullanmadan kendisine verilen objenin sığ bir kopyasını üretir burda sığ olması başka bir hafıza //adresinde aynı değerleri taşımaması sadece eski objeyi refrans etmesidir…
// anlamındadır sadece verilen sınıfa isaret eden referansları kopyalar….
//Boylece aynı sınıfı daha az masrafla üretebiliriz….
abstract class Eposta
{
public int Id { get; set; }
public string Baslik { get; set; }
public string Adres { get; set; }

public abstract string Icerik { get; set; }

public abstract Eposta Kopya();

}

class DiniBayram : Eposta
{
private string ic;
//Yeni sınıfımızın referanslarını abtract sınıfımıza atıyoruz boylece new kullanmadan yeni bir nesmemiz oluyor….
public override Eposta Kopya()
{
return (Eposta)this.MemberwiseClone();
}
//Yeni nesnemizde istedigimiz degisiklikleri yaparak eposta icerini degistirebilicegiz….
public override string Icerik
{
get
{
return ic;
}
set
{
ic=value;
}

}
}

class ResmiBayram : Eposta
{
private string ic;

public override Eposta Kopya()
{
return (Eposta)this.MemberwiseClone();
}

public override string Icerik
{
get
{
return ic;
}
set
{
ic=value;
}
}
}

class Duyuru : Eposta
{
private string ic;

public override Eposta Kopya()
{
return (Eposta)this.MemberwiseClone();
}

public override string Icerik
{
get
{
return ic;
}

set
{
ic = value;
}
}
}

class Program
{
static void Main(string[] args)
{

//Bir kez nesnemizi yaratıyoruz bu baska bir nesnede olur ben duyuru olanı seçtim…
Duyuru dy = new Duyuru()
{
Adres=”falanadres@mail.com”,
Baslik=”Sayın Ayhan eren”,
Id=1,
Icerik=”Kuruluşumuzun Özel Gününe Siz de Davetlisiniz…”
};

//Duyuru sınıfını kopyalayarak yeni bir referansları elde ediyoruz bu referansı eposta sınıfı bizin icin tasıyor…

Eposta db = dy.Kopya();
//Hersey duyuru ile aynı  yuzden ozelleştirmek icin gerekli islemleri yapıyoruz…
db.Icerik = (“Dini Bayramınız Kutlu Olsun…”);
Eposta rb = dy.Kopya();
rb.Icerik= (“Bayramınız Kutlu Olsun…”);

List<Eposta> posta = new List<Eposta>();
posta.Add(dy);
posta.Add(db);
posta.Add(rb);

//Tek nesneden birden çok nesne üretik…

foreach (var item in posta)
{
Console.WriteLine(item.Icerik+” “+item.Adres+” “+item.Baslik+” “+item.Id);
}
}
}
}
//İşin özü;new ile yeni sınıf üretmek maliyetlidir eğer iş gereği bunu çok sık ve benzer sınıflar icin yapıcaksanız bu şablonu kullanabilirsiniz…

Reklamlar

Fikriniz varmış,malınız gibi paylaşınız...

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s