Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Factory Method Tasarım Deseni - Factory Method Design Pattern | Sorumluluk Zinciri Tasarım Deseni - Chain of Responsibility Design Pattern>>

Prototype Tasarım Deseni - Prototype Design Pattern

Yazar harunozer 22 October 2012

Prototype Tasarım Deseni - Prototype Design Pattern Prototype (prototip) tasarım deseni creational grubununa ait, var olan nesnelerin kopyasının üretiminden sorumlu tasarım desenidir. dofactory.com a göre kullanım sıklığı 60% lardadır. creational grubuna ait tasarım desenlerini bu tasarım deseni ile tamamlayıp, behavioral grubundaki tasarım desenlerini inceliyor olacağız.

Bazı nesnelerin üretilme maliyeti oldukça yüksek olabilir. Veya aynı değerlerde nesne üretilmesi gereken durumlar olabilir. Böyle nesnelerin üretim maliyetini azaltmak için var olan nesnenin kopyasının üretilmesi yoluna gidilebilinir. Prototype tasarım deseni böyle durumdaki nesnelerin yönetilmesini sağlar. Buradaki kopyalama işlemi “Deep Copy – Derin Kopyalama” şeklindedir, yani nesne bire bir kopyalanarak yeni referans değerlere atanır.  Prototype tasarım deseni uygulanması oldukça basittir. İlk olarak içinde kendi türünde değer döndüren bir metot tanımlanmış olan interface veya abstract sınıf tanımlıyoruz. Çalışma zamanında kopyası alınabilecek nesnelerde bu interface veya abstract sınıfı uyguluyoruz. Concrete yani gerçek nesnelerde overwrite ettiğimiz bu metotlarda deep copy işlemini object sınıfında protected olarak tanımlanmış olan MemberwiseClone metodu ile gerçekleştirebiliriz. Concrete prototype sınıflarının farklı property veya metotları da olabilir.

Prototype tasarım deseninde 3 nesne yapısı vardır.
  • Prototype: Klonlama yapılacak sınıfların uygulaması gereken interface veya abstract sınıf.
  • Concrete Prototype: Klonlama özelliği olacak gerçek sınıflar.
  • Client: Klonlanmış nesneyi elde edecek nesne.

Prototype tasarım deseninin uml şeması aşağıdaki gibidir.

Örneğin bir uygulama geliştiriyoruz ve bu uygulamamızda Kisi ve Urun nesnelerimiz var. Uygulamamızın bazı yerlerinde bu nesnelerin klonlarına ihtiyacımız var. Uygulamamızın class diyagramı aşağıdadır.

İlk olarak uygulamamızın Prototype ve ConcretePrototype nesnelerini yazalım.
 
public interface IPrototype
{
    IPrototype Clone();
}
 
public class Kisi : IPrototype
{
    public string Ad { get; set; }
    public DateTime DogumTarihi { get; set; }
 
    public IPrototype Clone()
    {
        return this.MemberwiseClone() as IPrototype;
    }
}
 
public class Urun : IPrototype
{
    public string Name { get; set; }
    public float Price { get; set; }
 
    public IPrototype Clone()
    {
        return this.MemberwiseClone() as IPrototype;
    }
}
 
Oluşturduğumuz desen aşağıdaki gibi kullanılabilinir.
 
static void Main(string[] args)
{
    Kisi k = new Kisi { Ad = "Ahmet", DogumTarihi = DateTime.Now };
    Kisi k2 = k.Clone() as Kisi;
    k2.Ad = "Mehmet";
 
    Console.WriteLine(k.Ad);
    Console.WriteLine(k2.Ad);
 
    Urun u = new Urun { Name = "Cep Telefonu XWZ19", Price = 100.00f };
    Urun u2 = u.Clone() as Urun;
    u2.Name = "Buzdolabı X999";
 
    Console.WriteLine(u.Name);
    Console.WriteLine(u2.Name);
 
    Console.ReadKey();
}
 
Örnek uygulama kodlarını aşağıdaki linkten indirebilirsiniz.

PrototypeSample.rar

Tam Sayfa
Tags tasarım desenleri,
Kategoriler c#.net, Tasarım Desenleri
İşlemler
Bu Makale 4  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri