Creational Design Patterns (Yaratımsal Tasarım Kalıpları) ailesine ait ProtoType Design Pattern aynı nesneden birden fazla kez ihtiyaç olması durumda her nesne için tekrar tekrar new diyerek türetilmesi yerine ilk oluşturulan nesnenin kopyalanarak çoğaltılmasına olanak sağlayan tasarım desenidir.

Aslında ProtoType Design Pattern‘i biz günlük hayatımızda da çok kullanıyoruz. Örneğin iş yerinde yaptığınız işleri raporladığınız bir word ya da excel dosyası olduğunu düşünün. Bu dosyanın belirli bir formatı vardır ve bu formatta ki sadece bazı alanlar değiştirilerek her gün yeni bir rapor hazırlanır. Her seferinde dosyayı sıfırdan oluşturup çalışmak mı daha kolay yoksa varolan dosya üzerinde kopyala yapıştır yaparak değişiklik yapmak mı daha kolaydır. Tabiki kopyalamak çok daha kolaytır.

Sistemimizin de performanslı çalışması için mümkün olduğunda tembel insanlar gibi düşünmemiz gerekiyor. Tembel derken sisteme daha az iş yaptırarak performansı olumsuz etkilemeyen ve aynı sonuca varacak fikirlerden bahsediyorum 🙂

ProtoType Design Pattern‘i bir örnekle incelemeye çalışalım. Varsayalım ki bir şirket günlük satış tutarları üzerinden önemli kararlar aldığı için günde 3 kez toplantı yapmaya karar verdi. Bu toplantıları da kayıt ettikleri bir yazılımları olsun. Toplantıyla ilgili başlangıç, bitiş tarihi, konum, katılımcılar, araç gereçler ve şirketin durumunun özetlendiği bir alan olduğunu varsayalım. Bu özet alanının da biraz maliyetli olduğunu varsayalım. Toplantılar sisteme günlük job ile otomatik olarak atansın. Bu durumda ProtoType Design Pattern’i kullanmazsak aynı toplantının sadece tarih alanları farklı olduğu halde 3 kere new diyerek toplantı üretip kaydetmemiz gerekecekti. Üstelik bu sınıfı üretmek bizim için biraz maliyetliydi. Ama biz bir kere toplantı eklesek ve diğer ikisini de bu toplantı üzerinden eklersek ciddi bir kazanım elde etmiş oluruz. Bu örnekte benzer kayıt 2 tane olarak varsaydık ama bunun yüzlerce olduğu örneklerde olabilir.

Gelelim kod olarak örneğimize

İlk olarak Meeting adında bir sınıf oluşturuyorum. Bu sınıfın içinde nesneyi koplayacak Clone adında metot oluşturuyorum. Bu metot miras alınan sınıflar tarafından oluşturulacağı için abstract olarak tanımlıyorum. Abstract metot olduğu için sınıfımı da abstract olarak tanımlıyorum.

Meeting sınıfından türetilmiş DailyMeeting sınıfımı oluşturuyorum. Meeting sınıfından gelen Clone metodu abstract olduğu için override edip içini dolduruyorum. this.MemberwiseClone() metodu .net frameworküne ait bir sınıftır. Belirtilen sınıfın kopyasını oluşturur.

Main metodumda da bir toplantı oluşturup aynı toplantı üzerinden başlangıç ve bitiş zaman aralıklarını değiştiriyorum.

Sabah, öğlen ve akşam olmak üzere 3 toplantı oluşturdum. öğlen ve akşam için oluşturduğum toplantılar sabah için oluşturduğum nesne üzerinden kopyalayarak oluşturdum. Ekran çıktılarına baktığınızda birbirinden koplayanmasına rağmen farklı nesneler olduğunu göreceksiniz.

ProtoType Design Pattern
ProtoType Design Pattern

Özet olarak ProtoType Design Pattern tekrar eden nesneleri yeniden oluşturmadan kopyalayarak işlem yapmamıza olan sağlayan tasarım desenidir.

Bir önceki yazımda Singleton Design Pattern‘i incelemiştik dilerseniz onu da okuyabilirsiniz.

Hoşçakalın.