Design Pattern (Tasarım Kalıplar/Desenleri) Nedir? – C#

Design Pattern (Tasarım Desenleri), gerçek bir uygulama geliştirmede sıklıkla kullanılan/karşılaşılan yazılım tasarım problemlerine yönelik geliştirilmiş olan ve yaygın bir şekilde kabul görmüş olan çözümlerdir. Design Pattern’lar nesnelerin yeniden kullanılabilir tasarımları ve etkileşimleri ile ilgili kavramlardır.

Design Pattern’lar nesneye yönelik problemleri çözmeye odaklandığından dolayı tüm Objcet Oriented Programming (Nesne Tabanlı Programlama) diller için geçerli ortak kavramlardır.

Nesne yönelimli tasarımın temel prensipleri ilk kez 1994 yılında Design Patterns Elements of Reusable Object-Oriented Software isimli bir kitapta yayınlandı. Kitap Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides tarafından yazılmıştır. Dört yazardan dolayı bu kitap Gang of Four (GoF) Design Patterns olarak daha çok bilinir. Ve zamanla bu prensipler “Gof Design Pattern” olarak adlandırılmaya başlandı.

23 adete Gang of Four (GoF) kalıpları tüm tasarım prensiplerinin temeli olarak kabul edilir. Bu prensipler üç grupta kategorize edilmiştir. Creational (Yaratımsal), Structural (Yapısal) ve Behavioral (Davranışsal)

GoF Design Pattern (Tasarım Kalıpları/Desenleri) Tipleri

1 – Creational: Bir nesnenin yaratılmasıyla ilgilenen tasarım kalıpları.

Bu desenin genel özelliği; çeşitli biçimlerdeki nesne yaratılış işlemlerini nesneyi kullanacak olan kişiden gizleme ve soyutlama üzerine olmasıdır.

2 – Structural: Bu kategorideki tasarım desenleri, Inheritance (Kalıtım) ve Composition (bileşim) gibi class (sınıf) yapılarıyla ilgilidir.

Bu desenin genel özelliği; sınıfın yapısında değişikliğe gidilmeksizin belirli nesnelere ek fonksiyonların özelliklerin dinamik olarak eklenmesiyle ilgilidir.

3 – Behavioral: Bu tür tasarım desenleri, gelecekte nesneler arasındaki daha iyi bir etkileşim oluşturmayı hedefler.

Bu desenin genel özelliği; nesnelerin belirli davranışlarını el alarak bu doğrultuda doğru çözümler sağlamaya yöneliktir. Özellikle Lose coupling ve flexibility kavramları üzerine çözümler sunar.

Creational Design Patterns (Yaratımsal Tasarım Desenleri)

Creational Design Pattern (Yaratıcı tasarım desenler)i kategorisinde 5 adet desen bulunmaktadır.

  1. Singleton: Singleton modeli, sınıfın yalnızca bir örneğinin oluşturulabilmesini sağlamak için bir sınıfın başlatılmasını kısıtlar.
  2. Factory: Factory (Fabrika) modeli, bir nesneyi sınıftan bir Factory (Fabrika) sınıfına somutlaştırma sorumluluğunu üstlenir.
  3. Abstract Factory: Factory (Fabrika) sınıfları için bir Factory (Fabrika) oluşturmamızı sağlar. Yani bir Factory ailesini toplama görevi üstlenir.
  4. Builder: Adım adım bir nesne oluşturur ve sonunda nesne örneği oluşturma için bir metot oluşturma.
  5. Prototype: Başka bir benzer örnekten yeni bir nesne örneği oluşturup ve ardından oluşturduğu nesneyi gereksinimlerimize göre değiştirebilir.

Structural Design Patterns (Yapısal Tasarım Desenleri)

Gangs of Four tasarım kalıpları kitabında tanımlanan 7 Structural Design Pattern (Yapısal Tasarım Deseni) vardır.

  1. Adapter: Birlikte çalışabilmeleri için ilgisiz iki varlık arasında bir arabirim sağlar.
  2. Composite: Parça-bütün hiyerarşisi uygulamamız gerektiğinde kullanılır. Örneğin, daire, kare, üçgen vb. diğer parçalardan oluşan bir diyagram.
  3. Proxy: Başka bir nesneye erişimi kontrol etmesi için bir vekil veya yer tutucu sağlar.
  4. Flyweight: Sabit nesnelerle kullanılan nesne örneklerini önbelleğe alma ve yeniden kullanma.
  5. Facede: Client (İstemci) uygulamalarına yardımcı olmak için mevcut interface üzerinde bir sarmalayıcı interface oluşturma.
  6. Bridge: Interface’leri uygulamadan ayırmak ve uygulama ayrıntılarını client (istemci) programından gizlemek için kullanılır.
  7. Decorator: Çalışma zamanında bir nesnenin işlevselliğini değiştirmek için kullanılır.

Behavioral Design Patterns (Davranışsal Tasarım Desenleri)

GoF tasarım modellerinde tanımlanan 11 Behavioral Design Pattern (Davranışsal Tasarım Deseni) vardır.

  1. Template Method: bir template metot oluşturmak ve uygulama adımlarından bazılarını alt sınıflara implement etmek için kullanılır.
  2. Mediator: Bir sistemdeki farklı nesneler arasında merkezi bir iletişim ortamı sağlamak için kullanılır.
  3. Chain of Responsibility: Istemciden gelen bir talebin, bunları işlemek için bir nesneler zincirine iletildiği yazılım tasarımında loose coupling (gevşek bağlantı) elde etmek için kullanılır.
  4. Observer: Bir nesnenin durumuyla ilgilendiğinizde ve herhangi bir değişiklik olduğunda bildirim almak istediğinizde kullanışlıdır.
  5. Strategy: Belirli bir görev için birden çok algoritmamız olduğunda ve müşteri çalışma zamanında kullanılacak gerçek uygulamaya karar verdiğinde strateji modeli kullanılır.
  6. Command: Bir request-response (istek-yanıt) modelinde lose coupling implement etmek için kullanılır.
  7. State: Bir Nesne davranışını dahili durumuna göre değiştirdiğinde kullanılır.
  8. Visitor: Benzer türden Nesnelerden oluşan bir grup üzerinde bir işlem gerçekleştirmemiz gerektiğinde kullanılır.
  9. Interpreter: Bir dil için gramer temsilini tanımlar ve bu dilbilgisi ile ilgilenmek için bir tercüman sağlar.
  10. Iterator: Bir grup Nesne arasında geçiş yapmak için standart bir yol sağlamak için kullanılır.
  11. Memento: Bir nesnenin durumunu daha sonra geri yükleyebilmek için kaydetmek istediğimizde kullanılır.

C# Design Pattern (C# Tasarım Desenleri)

Bilindiği üzere Design Pattern (Tasarım Deseni) kavramları nesne tabanlı programlama üzerin kurgulanmış yazılım geliştirme modelleridir. Bende bu yazımda Design Pattern (Tasarım Deseni) konularını en popüler nesne tabanlı programlama dili olan C# üzerinden örneklemeler yaparak anlatacağım. Umarım Faydalı olabilirim. İyi çalışmalar…