Prototype Design Pattern



Yaratımsal Tasarım Kalıpları (Creational Design Patterns) 'dan Prototype Design Pattern (PDP) bir nesne yaratılırken karşımıza çıkacak problemleri çözmek için geliştirilmiştir. Üretildikten sonra belleğe aktarımı zaman açısından maliyetli olan nesnelerin birden fazla yerde kullanılması durumunda bu maliyetin azaltılmasına yardımcı olur. Bu desenin amacı bu nesneden bir tane üretip geri kalanlarını klonlamaktır.

Bir örnek üzerinden anlatmak gerekirse bir muhasebeci haftalık gider raporunu Excel üstünde hazırlıyor. Her hafta aynı Excel şablonunu baştan yaratıp doldurmak yerine bu şablonu kopyala yapıştır değerleri giriyor. Diğer türlü sürekli bu şablonu tasarlamaya kalksa zaman kaybı ve iş tekrarı yapmış olacaktır.

Nasıl ki bilgisayar üzerinde kopyala - yapıştır işlemleri hızlı bir şekilde yapılıyorsa, bu yaratılması uzun süren nesneler içinde geçerlidir. Sadece bu nesneye kopyalanabilir özelliği vermek yeterli olacaktır.

Oyun programlama da en çok başvurulan yöntemlerden biride bu klonlama işlemedir. Age of Empires , Red Alert gibi oyunlarda birden fazla askerimiz işçimiz olması en güzel örneklerden biridir. Bir askeri ürettiğimiz de yenisini üretmek istediğimizde belleğe yüklenmek yerine bunu klonlamak performansı arttırmaktadır. Bunu kod açısından aşağıdaki şekilde örneklendirebiliriz.


Asker adında bir class oluşturup ICloneable interface'i aracılığı ile oluşturduğumuz sınıfa klonlanma özelliğini veriyoruz. ICloenable .Net Framework içinde bulunan hazır bir interface'dir. Bu interface'i implement ettiğimizde Clone() metodu bu sınıfa ekleniyor. Bu metot içine MemberwiseClone() metodunu yazarak belleğin heap alanında eklenmiş bir  referans tipin sadece üyelerini kopyalıyoruz. Yani değerleri kopyalama işlemi yapmıyoruz. Buna Shallow kopyalama yöntemi denmektedir.Eğer tüm değerleri kopyalamak istersek o zaman Deep Copy yöntemini kullanabiliriz.

Şimdi askerleri üretecek bir koleksiyon hazırlayalım ve adı Kisla olsun.



Artık istediğimiz kadar askeri üretebiliriz. Şimdi deseni uygulamaya geçelim.


Görüldüğü gibi new ile bir adet asker ürettik ve diğer askerleri de bu askerin birer kopyası olarak oluşturduk. Askerleri yarattığımızda 2 farklı nesneyi klonlama yöntemi ile oluşturmuş olduk ve programın çıktısı da aşağıdaki gibi oldu.



Yorumlar