Prototype Design Pattern
Büyük,karmaşık, resource kullanımı oldukça fazla olan nesneler ile çalışıyorsak bu nesneleri defalarca new ile yeniden yaratma maliyeti çok fazla ise, nesneler arası alanların kopyalanması gerekiyorsa faydalı olabilecek bir pattern Prototype.
Neden önemli bu pattern çünkü bir uygulama geliştirirken maliyetler çok önemli,nesnelerin üretilme maliyeti de tabii ki öyle. İşte Prototype pattern ile nesnenin tipinin ne olduğunu bilmeden elimizdeki bir nesnenin kopyasını alabiliyoruz.
Bu pattern’i işlerken 2 farklı nesne kopyalama yöntemini inceleyeceğiz: Shallow Copy, Deep Copy.
İlk başta shallow kopyalama tekniği ile prototype tasarım desenini inceleyeceğiz.
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.
Shallow Copy:
Nesnenin üye elemanlarını kopyalar. Eğer bu üye eleman Değer tipinde ise bit bit kopyalama işlemi gerçekleştirilir. Eğer üye eleman referans tipinde ise referans kopyalanır fakat referansın gösterdiği veri kümesi kopyalanmaz. Orjinal nesne ve Kopyalanmış nesnede yer alan referans tipi üye eleman bellekte aynı veri kümesine işaret eder. Kopyalama işlemi static üye elemanları için geçersizdir.
Deep Copy:
Nesnenin bütün değer ve referans üye elemanlarını bit bit kopyalama işlemine denir. Deep copy işlemini kendimiz yazmamız gerekmektedir. Deep copy için .Net in sunduğu herhangi bir sınıf metod bulunmamaktadır.