Tasarım Desenleri Yazı Dizisi – Bölüm 4 – Prototype Tasarım Deseni (Prototip)

Creational Patterns (Yaratıcı Tasarım Desenleri) grubu altında yer alan Prototype tasarım deseni üretilmek istenen bir nesnenin var olan farklı bir nesneden kopyalanması ile üretilmesini sağlamaktadır.

Peki neden böyle bir şeye ihtiyacımız var?

Bazı nesnelerin New operatörü ile oluşturulmasının maliyetli (bellek alanı, oluşturulma süreci vs.) olduğu durumlar söz konusu olabilir. İşte bu gibi durumlarda var olan bir nesnenin kopyasının alınması her zaman daha az maliyetli olacak ve bizlere zaman + performans kazandıracaktır.

Bu durumu şu şekildeki bir senaryo ile daha kolay kavrayabiliriz.

Var olan bir web sitemizde bulunan üyelerimize ait ad, soyad ve üyelik tipini tanımlayabileceğimiz ve bu bilgileri bir listede tutarak ekrana yazdırabileceğimiz bir senaryomuzun olduğunu düşünelim.


Resim-1

Bu durumda tüm üyelerimize ait oluşturulacak nesnenin yapısal özellikleri aynı sadece içerikleri farklı olacaktır. Bu da aynı nesneden sürekli yeni oluşturmamız yerine var olan bir nesneyi MemberwiseClone metodu ile kopyalayarak sadece içeriklerini değiştirmemizle işimizi çözebilmemizi sağlayacaktır.

Şimdi belirtmiş olduğumuz bu yapımızı Prototype Tasarım Deseni ile tasarlayalım.

İlk yapmamız gereken Uyelerimizi tanımlayabileceğimiz Class’ımıza ait Prototipi belirten Abstract Class’ını tasarlamaktır.


Resim-2

Prototipe ait Class içerisinde bulunan Abstract türündeki Kopyala adlı metodumuz geriye Prototip tipinden bir değer döndürmektedir. Bu sayede Prototip Class’ımızdan miras alan Class’ların, Prototip Class’ımızın Abstract olması sebebiyle New ile yeni bir nesne oluşturulamayacağından dolayı kendisinin geriye döndürülmesini sağlayacaktır.

Prototip tanımımızı yaptıktan sonra artık üyelerimize ait bilgilerin tutulacağı sınıfımızı tasarlayabiliriz.


Resim-3

Uye sınıfımızda miras aldığımız Prototipimiz içerisinde bulunan Abstract türündeki Kopyala metodunu ezerek içerisinde sınıfı tüm özellikleriyle kopyalamayı sağlayan MemberwiseClone metodunu kullandık. Ancak MemberwiseClone metodu Object tipinden veri döndürdüğü için ve bizim döndürmemiz gereken tip Class’ın kendi tipi olması gerektiğinden dolayı as Uye komutu ile bu problemi çözüyoruz.

Artık üyelerimize ait tanımı yapabilir ve belirtmiş olduğumuz listemizi hazırlayabiliriz.


Resim-4


Resim-5

Hazırladığımız tasarım desenimiz sayesinde yeni üye tanımlarında New anahtar sözcüğünü kullanmamıza gerek yoktur. Bunun yanında yeni malzeme ve yeni ürün ekleme işleminde tek yapmamız gereken Yeni eklediğimiz tipin portatif sınıfı miras alması ve kopyala metodunun ezilerek sınıfa ait tipin döndürülmesidir.

Bu makalede kullanılan tasarım desenine ait kodu indirmek için buraya tıklayın. Dosyanın şifresi : mshowto.org.

Referanslar

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

www.mshowto.org

Yazı gezinmesi

Mobil sürümden çık