Yaratımsal Tasarım Kalıpları Karşılaştırma Ölçümü

Kerem TAN
4 min readAug 29, 2023

--

Merhaba sevgili okurlar,
Bu yazımda üniversitede öğrenciyken yaptığım basit bir çalışmayı ve bu çalışmanın sonuçlarını sizlerle paylaşmak istiyorum.

Bu makalede yer alan yaratımsal tasarım kalıpları(creational design patterns) Java Programlama dili ile yazılmıştır. Dolayısıyla bu araştırmadaki performans değerleri farklı programlama dillerindeki farklı yaklaşımlarla değişkenlik gösterebilir.

Örneğin, bu yaratımsal tasarım kalıpları ile üretilmek istenen objeler C++ Programlama dilindeki CRTP (Curiously Recurring Template Pattern) idiomu kullanılarak da oluşturulabilir.

Bu makalenin basitçe amacı, yaratımsal tasarım kalıplarının obje üretim maliyetlerini karşılaştırmaktır.

Öncelikle, Tasarım Kalıplarını kullanırken temel önceliğimizin performans kazanmak yerine sürdürülebilir ve temiz kod yazmak olduğunu hatırlatmak isterim.

Bu makaledeki temel amacımız, yaratımsal tasarım kalıplarına farklı bir perspektiften bakmaya çalışmaktır. Ayrıca bu çalışmada yaratımsal tasarım kalıplarının yanlış kullanımı ile sürdürülebilirlik, temiz kodlama ve benzeri kavramların sekteye uğramasının yanı sıra projemizin performansının nasıl etkilenebileceğini anlamaya çalışmaktır.

Projedeki App.java’daki main fonksiyonumuz, her bir yaratımsal tasarım kalıbı ile üretilen objelerin toplam maliyetini ölçmektedir.

Bu gözlemleri yapabilmek için farklı şekillerde üretilebilen 3 tane somut sınıf yazılmıştır. Bu sınıflar Customer paketi içinde yer almaktadır.

Aşağıda App.java sınıfımızı çalıştırdığımızda elde ettiğimiz grafiklerden birkaç örnek bulunmaktadır.

1. Çıktı
2. Çıktı
3. Çıktı
4. Çıktı
5. Çıktı

Karşılaştırma Sonuçlarının Özeti

Bu aşamada yaptığımız testlerde istisnai sonuçlar çıksa da gözlemlerimiz sonucunda yaratımsal tasarım kalıpları arasında üretim maliyeti en yüksek olan yaratımsal tasarım kalıbı Builder Tasarım Kalıbı olmuştur.
İkinci en yüksek üretim maliyetine sahip olan yaratımsal tasarım deseni Soyut Fabrika Tasarım Kalıbı, üçüncü en yüksek üretim maliyetine sahip olan yaratımsal tasarım kalıbı ise Basit Fabrika Tasarım Kalıbıdır.
Gözlemlerimize göre en düşük üretim maliyetine sahip yaratımsal tasarım kalıbı Prototip Tasarım Kalıbı olmuştur.

Karşılaştırma Sonuçlarına İlişkin Tahminler

~ Builder Tasarım Kalıbı (Builder Design Pattern);
Bilindiği üzere builder tasarım kalıbı farklı ve istediğimiz esneklikte objeler üretmemizi sağlar.

Builder tasarım kalıbı bize üretim esnekliği sağlayabilmek için öncelikle kendi objesini yaratır ve bu yaratılan builder objesi ile istediğimiz alanı istediğimiz uygun bir değer ile set edebiliriz. İstediğimiz alanları ayarladıktan sonra üretmek istediğimiz objeyi üretiyoruz ve builder nesnesinin tüm alanlarını üretmek istediğimiz objenin ilgili alanlarına set ediyoruz. Son olarak da build işlemini gerçekleştiriyoruz ve üretmek istediğimiz obje hazır hale geliyor.

Builder tasarım deseni ile objelerimizi istediğimiz esneklikte üretebilmek için her seferinde 2 obje üretmemiz ve bu objelerin tüm alanlarını birbirlerine göre ayarlamamız gerekiyor.

Bu sebepler üretim maliyetimizi diğer yaratım tasarım desenlerine göre daha fazla arttırmış olabilir.

~ Soyut Fabrika Tasarım Kalıbı (Abstract Factory Design Pattern);
Bilindiği üzere soyut fabrika tasarım kalıbı çok sayıda, farklı veya karmaşık objeler üretmemiz gerektiğinde kullanılır.

Soyut fabrika tasarım kalıbında üretmek istediğimiz her bir obje için o objeyi üretmekten sorumlu bir sınıf yazarız.
Böylece sistemimize çok hızlı ve esnek bir şekilde yeni bir sınıf ekleyebilir ya da çıkarabiliriz. Ayrıca bu değişiklikler için sistemimiz üzerinde herhangi bir düzeltme yapmamıza da gerek kalmıyor.

Ancak soyut fabrika tasarım kalıbı ile her bir obje ürettiğimizde 2 adet obje üretmiş oluyoruz. Bundan dolayı soyut fabrika tasarım kalıbı ile obje üretmenin maliyeti, ikinci en yüksek maliyet olmuş olabilir.

Soyut fabrika tasarım kalıbının üretim maliyetinin builder tasarım kalıbına göre daha düşük olmasının sebebi soyut fabrika tasarım deseninde alanları her seferinde tek tek set etmek zorunda olmamamız olabilir.

~ Basit Fabrika Tasarım Kalıbı (Simple Factory Design Pattern);
Bilindiği üzere basit fabrika tasarım deseni çok sayıda, farklı nesne üretmemiz gerektiğinde kullanılır.

Soyut fabrika tasarım kalıbından farklı olarak objelerin üretimi için farklı objeler üretmek yerine basit fabrika tasarım kalıbında objelerin üretiminden tek bir obje sorumludur. Üretim için oluşturulan sorumlu obje kendi karar mekanizması aracılığıyla gerekli objeleri üretir.

Basit fabrika tasarım kalıbının önceki yaratım tasarım kalıplarına göre obje üretme maliyetinin daha düşük olmasının nedeni, bir objeyi üretmek için her seferinde başka bir obje üretmek yerine üretimden sorumlu tek bir objeyi yalnızca bir kez üretmesi ve kullanması olabilir.

Ancak aşağıdaki detaylar da gözden kaçırılmamalıdır. Basit fabrika tasarım kalıbında karar mekanizmalarının sayısı arttırılırsa, her bir karar yapısı kontrol edilecektir. Bu nedenle basit fabrika tasarımı için objelerin toplam üretim maliyetinde önceki yaratımsal tasarım kalıplarındakine göre daha fazla artış olabilir. Ayrıca, her bir yeni sınıf eklendiğinde veya bir sınıf çıkarıldığında, objeleri üretmekten sorumlu sınıfın da düzeltilmesi gerekir.

~ Prototip Tasarım Kalıbı (Prototype Design Pattern);
Bilindiği üzere prototip tasarım kalıbı, eğer üreteceğimiz objeler belli bir şablona dayanıyorsa yeni bir obje üretmek yerine daha önce ürettiğimiz bir objeyi klonlayıp sadece gerekli alanlarını değiştirerek kullanmamızı sağlar.

Prototip tasarım kalıbının en düşük obje üretim maliyetine sahip olmasının sebebi, diğer yaratımsal tasarım kalıplarından farklı olarak sıfırdan bir obje üretmek yerine var olan bir objeyi klonlayarak yeni objeler üretmesi olabilir.

Buraya kadar okuduğunuz için teşekkür ederim.

Her bir yaratımsal tasarım kalıbı ile üretilen her bir objenin anlık maliyetini ölçmek isterseniz, projeyi indirebilir ve projedeki App2.java’daki main fonksiyonumuzu çalıştırabilirsiniz.

Bu yazının kodlarına buradan ulaşabilirsiniz:

Bu makalenin İngilizce Versiyonuna buradan ulaşabilirsiniz:

--

--