Design Patterns (Tasarım Desenleri) Nedir?

Veysel Güneş
3 min readOct 7, 2019

--

  • Yazılım mühendisliğinde tasarım desenleri, yazılım tasarımında yaygın olarak ortaya çıkan bir soruna genel 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 sorunun nasıl çözüleceğine dair bir açıklama veya şablon sunar.
  • Tasarım desenlerini 3 ana başlıkta değerlendiririz;
  1. Oluşturucu(Creational) tasarım desenleri
    Nesnelerin nasl yaratılacağı hakkında öneriler sunar.
  • Singleton: Uygulamanın yaşam süresince bir nesnenin bir kez oluşturulmasını sağlar.
  • Abstract Factory: Birbirleri ile ilişkili sınıfların oluşturulmasını düzenler.
  • Builder: Biden fazla parçadan oluşan nesnelerin üretilmesinden sorumludur.
  • Factory Method: Aynı arayüzü kullanan nesnelerin üretiminden sorumludur.
  • Prototype: Var olan nesnelerin kopyasının üretiminden sorumludur.

2. Yapısal(Structual) tasarım desenleri
Sınıflar arasındaki ilişkileri belirleme önerileri sunar, Nasıl türetilmeli, hangi nesneleri içermeli, sınıflar birbirlerini nasıl bağlı olmalı gibi soruların cevaplarını yanıtlar.

  • Adapter: Uygulamada ki bir yapıya dışarıdaki bir yapıyı uygulamayı düzenler.
  • Bridge: Nesnelerin modelleme ve uygulanmasını ayrı sınıf hiyerarşilerinde tanımlanmasını düzenler.
  • Composite: Ağaç yapısında ki nesne kalıplarının hiyerarşik olarak iç içe kullanılmasını düzenler.
  • Decorator: Bir yapıya dinamik olarak yeni metotlar eklenmesini düzenler.
  • Façade: Alt sistemlerin direkt olarak kullanılması yerine alt sistemdeki nesneleri kullanan başka bir nesne üzerinden kullanılmasını sağlar.
  • Flyweight: Sık kullanılan nesnelerin bellek yönetimini kontrol etmek için kullanılan bir tasarım desenidir.
  • Proxy: Oluşturulması karmaşık veya oluşturulması zaman alan işlemlerin kontrolünü sağlar.

3. Davranışsal tasarım desenleri
Soruna göre nesneler arası ortak haberleşmeyi en iyi şekilde kurmamıza öneriler sunar.

  • Chain of responsibility: Bir isteğin belli sınıflar içinde gezdirilerek ilgili sınıfın işlem yapmasını yönetir.
  • Command: İşlemlerin nesne haline getirilip başka bir nesne(invoker) üzerinden tetiklendiği bir tasarım desenidir.
  • Interpreter: İşlemlerin nesne haline getirilip başka bir nesne(invoker) üzerinden tetiklendiği bir tasarım desenidir.
  • Iterator: Nesne koleksyonlarının elemanlarını belirlenen kurallara göre elde edilmesini düzenler.
  • Mediator: Çalışmaları birbirleri ile aynı arayüzden türeyen nesnelerin durumlarına bağlı olan nesnelerin davranışlarını düzenler.
  • Memento: Bir nesnenin tamamının veya bazı özelliklerinin tutularak sonradan tekrar elde edilmesini sağlar.
  • Observer: Bir nesnede meydana gelen değişikliklerde içinde bulundurduğu listede bulunan nesnelere haber gönderen tasarım desenidir.
  • State: Nesnelerin farklı durumlarda farklı çalışmalarını sağlar.
  • Strategy: Bir işlemin birden fazla şekilde gerçekleştirile bilineceği durumları düzenler.
  • Template method:Bir algoritmanın adımlarının abstract sınıfta tanımlanarak farklı adımların concrete sınıflarında overwrite edilip çalıştırılmasını düzenler.
  • Visitor: Uygulamada ki sınıflara yeni metotlar eklenmesini düzenler.
Desing Patterns

Tasarım desenleri bize ne sağlar?

Nesneye dayalı programlamada sınıfların kendi içinde tutarlı, fakat diğer sınıflara en az bağımlı olmaları beklenir. Yazılım parçalarının tekrar kolayca kullanılabilir olmaları, kolayca genişleyebilir veya sistemden kolayca çıkarılabilir olmaları yani kısaca esnek olmaları beklenir. Yeni ihtiyaçların, yazılımın diğer kısımlarını en az biçimde etkileyerek yazılıma kolayca dahil olmaları beklenir. İşte tasarım desenleri, nesneye dayalı programlamanın bu prensiplerini doğru bir şekilde uygulamamızı sağlar.

Tasarım desenleri, daha önce sınanmış, ispatlanmış ve yararı görülmüş yazılım yöntemleri önerdiği için geliştirme sürecini hızlandırır. Yeniden kullanılabilir, esnek çözümler yazılımın büyümesini, genişlemesini kolaylaştırır. Desenleri bilen, bunlara aşina olmuş yazılımcı ve yazılım mimarları için kod okunabilirliği yüksek olur. Bu kişiler arasında ortak bir dil yaratmayı sağlayarak, iletişimi kolaylaştırır.

Sonuç olarak tasarım desenlerini uygulayarak, etkin kodlar üretiriz, yazılımın kalitesini arttırırız. Zamandan ve yazılım için harcanan iş gücünden de tasarruf etmiş oluruz.

Sabırla okuduğunuz için teşekkür ederim.

Saygılarımla

--

--

Veysel Güneş

Studying software engineering at firat university, Blogger Öğrendiklerini yazmaktan ve ortaya bir ürün koymaktan mutlu olan http://veyselgunes.site/