Design Patterns(Tasarım desenleri)

Yazılım mühendisliğinde  tasarım deseni , yazılım tasarımında yaygın olarak ortaya çıkan bir sorun için genel olarak tekrarlanabilir bir çözümdür. Bir tasarım deseni doğrudan koda dönüştürülebilen bitmiş bir tasarım değildir. Birçok farklı durumda kullanılabilecek bir problemin nasıl çözüleceğine dair bir açıklama veya şablondur.

Tasarım Desenlerinin Kullanımı

Tasarım kalıpları, test edilmiş ve kanıtlanmış geliştirme paradigmaları sağlayarak geliştirme sürecini hızlandırabilir. Tasarım desenlerini yeniden kullanmak, büyük sorunlara neden olabilecek ince sorunları önlemeye yardımcı olur  ve kod okunabilirliğini sağlar.

Genellikle, yazılımcılar yalnızca belirli yazılım tasarım tekniklerini belirli sorunlara nasıl uygulayacağını bilirler. Bu tekniklerin daha geniş bir problem yelpazesine uygulanması zordur. Tasarım desenleri, belirli bir soruna bağlı özellikleri gerektirmeyen bir formatta belgelenen genel çözümler sunar.

Ek olarak, kalıplar, geliştiricilerin, yazılım etkileşimleri için iyi bilinen, iyi anlaşılan adlar kullanarak iletişim kurmasına izin verir. Ortak tasarım desenleri zaman içinde geliştirilebilir ve bu da onları geçici tasarımlardan daha güçlü kılar.

Creational design patterns(Yaratıcı Tasarım Desenleri)

Bu tasarım desenlerinin hepsi sınıf örneği ile ilgilidir. Bu kalıp daha sonra sınıf oluşturma kalıplarına ve nesne oluşturma kalıplarına ayrılabilir. Sınıf oluşturma kalıpları, örnekleme sürecinde mirasını etkin bir şekilde kullanırken, nesne oluşturma kalıpları, işi yapmak için delegasyonu etkili bir şekilde kullanır.

  • Abstract Factory
  • Builder
  • Factory Method
  • Object Pool
  • Prototype

Structural design patterns(Yapısal Tasarım Desenleri)

Bu tasarım desenlerinin tümü Sınıf ve Nesne bileşimi ile ilgilidir. Yapısal sınıf oluşturma kalıpları arayüzleri oluşturmak için kalıtım kullanır. Yapısal nesne kalıpları, yeni işlevsellik elde etmek için nesneleri oluşturma yollarını tanımlar.

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Facade
  • Flyweight
  • Private Class Data
  • Proxy

Behavioral Design Patterns (Davranışsal tasarım desenleri)

Bu tasarım desenlerinin tümü Class'ın nesne iletişimi ile ilgilidir. Davranışsal kalıplar, nesneler arasındaki iletişimle en özel olarak ilgilenen kalıplardır.

  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Null Object
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor

 

Design Patterns Eleştiri:

Bu tasarım desenlerini bazı bilgisayar bilimcileri eleştirmektedir.

Kalıplara duyulan ihtiyaç, bilgisayar dilleri veya yetersiz soyutlama yeteneğine sahip teknikleri kullanmaktan kaynaklanmaktadır. İdeal faktoringe göre, bir konsept kopyalanmamalı, sadece referans olarak alınmalıdır.  Paul Graham  Revenge of the Nerds. adlı makalesinde yazıyor .

Peter Norvig de benzer bir argüman sunar. Design Patterns kitabındaki (esas olarak C ++ 'ya odaklanan) 23 desenden 16'sının Lisp veya Dylan'da sadeleştirildiğini veya ortadan kaldırıldığını (doğrudan dil desteği ile) göstermektedir.

Resmiyetten yoksun

Tasarım kalıplarının incelenmesi aşırı derecede geçicidir ve bazıları konseptin daha resmi bir temele dayanması gerektiğini savundular .

Verimsiz çözümlere yol açar

Bir tasarım deseni fikri zaten en iyi uygulamaları kabul etmiş olanı standartlaştırma girişimidir. Prensip olarak bu yararlı görünebilir, ancak pratikte sıklıkla kodun gereksiz bir şekilde tekrarlanmasına neden olur. “Yeterince zar zor iyi” bir tasarım deseni yerine iyi faktörlü bir uygulama kullanmak neredeyse her zaman daha verimli bir çözümdür.

Diğer soyutlamalardan önemli ölçüde farklı değildir

Bazı yazarlar, tasarım desenlerinin diğer soyutlama biçimlerinden önemli ölçüde farklı olmadığını ve programlama alanındaki mevcut olayları tanımlamak için yeni terminolojinin (mimarlık topluluğundan ödünç alınmasının) gereksiz olduğunu iddia etmektedir. Model-View-Controller paradigması, birkaç yıl boyunca “tasarım kalıpları” kavramını ön plana çıkaran bir “kalıp” örneği olarak tanımlanır.