Bu içerik ağırlıklı olarak refactoring.guru sitesindeki içeriğin tercümesi ve derlenmesinden oluşturulmuştur. Başka kaynaklardan da ek bilgiler içerebilir.
Tasarım Desenleri nedir?
Tasarım Desenleri (veya bir diğer kullanımla tasarım kalıpları) yazılımda sık karşılaşılan problemler için oluşturulmuş çözümlerdir. Kodunuz içerisinde sıklıkla karşılaşılan sorunları çözmek için özelleştirerek kullanabileceğiniz önceden hazırlanmış planlar olarak düşünebilirsiniz. Tasarım kalıpları bir fonksiyon, ya da sınıf gibi hazır olarak bulup kodunuza ekleyebileceğiniz parçalar değil, prorblem çözümü için kullanılan genel konseptlerdir.
Her ikiside bilinen problemleri çözmek için üretilmiş tipik çözümler olduğundan tasarım desenleri genelde algoritmalarla karıştırılır. Algoritmalar bir hedefe ulaşabilecek net bir eylemler kümesi tanımlarken, tasarım desenleri bir çözümün daha üst düzey bir tanımıdır. Aynı desenin iki farklı programa uygulanan kodu farklı olabilir.
Bir algoritmayı yemek tarifine benzetebiliriz. Kullanılacak malzemeler ve takip edilecek adımlar net olarak bellidir. Öte yandan bir tasarım kalıbı daha çok bir plan gibidir, sonuçta bekleneni ve özellikleri görürsünüz ama uygulama sırası ve şekli biraz daha size bağlıdır.
Tasarım deseni çeşitleri nelerdir?
Tasarım desenleri karmaşıklığı, detay düzeyleri ve tasarlanan sistemin ne kadarına uygulanabileceğine bağlı olarak değişiklik gösterirler.
En basit ve alt düzey kalıplar deyimler ‘idoms’ olarak adlandırılır. Bunlar genellikle belirli bir programla diline özeldir.
Daha evrensel ve üst seviye olan desenler ise mimari desenler (‘architectural patterns’) olarak adlandırılır. Bu desenler teorik olarak herhangi bir programlama diline uygulanabilir. Diğer desenlerin aksine uygulamanın tamamının yapısını tasarlamaya olanak sağlarlar.
Kullanım Amaçlarına Göre Tasarım Desenleri / Design Patterns
Yazının devamında tasrım desenleri isimlerini ingilizce olarak kullanacağım. Fazlasıyla teknik terimler olduğu için Türkçe karşılıkları anlaşılır/mantıklı olmuyor.
Yaratımsal Desenler (Creational Patterns)
Yaratımsal Desenler (Creational Patterns) kodun esnekliğini ve tekrar kullanılabilirliğini arttıran nesne oluşturma mekanizmaları sunarlar.
Yapısal Desenler (Structural Patterns)
Yapısal Desenler (Structural Patterns) yapının esnekliği ve verimliliğini bozmadan nesneler ve sınıfların daha büyük yapılar oluşturmak için nasıl bir araya getirileceğini tanımlarlar.
Davranışsal Desenler (Behavioral Patterns)
Davranışsal Desenler (Behavioral Patterns) nesneler arasında etkin bir iletişim ve sorumluluk atamasının yapılmasını sağlarlar.