2 min read

Design Patterns: Tasarım Desenleri

Bu yazıda sık kullanılan tasarım desenlerinin kısa açıklamalarını bulabilirsiniz.
Design Patterns: Tasarım Desenleri

Tasarım desenleri

Tasarım desenleri özellikle büyük çaplı framework'lerle çalışırken sıklıkla karşımıza çıkıyor. Bunları yerinde ve doğru kullanabilmek için her birinin amacını ve uygulama şeklini iyi bilmek gerekir.

Aşağıdaki listede tasarım desenlerinin adları ve kısa açıklamaları bulunuyor. Bildiklerinizi tekrar etmek veya bilmediklerinizi tespit etmek için kullanabilirsiniz.

  • Singleton: Utility, helper
  • Factory Method: Nesne yaratmayı başka nesneye bırakıp nesneleri aynı interface'ten türetiyoruz
  • Abstract: Farklı hiyerarşilerden nesneler kullanılacaksa, bunları üreten factory'leri soyutlarız
  • Prototype: Clone, shallow copy ile new() den tasarruf edilir
  • Builder: StringBuilder, parçaları birleştirme
  • Facade: Basit arayüz sağlanır (video converter, cross-cutting concerns)
  • Adapter: Kendi classından subclass alıp interface'den de kalıtım alırız
  • Composite: Hiyerarşide enumeration vb işlem soyutlama
  • Proxy: Cache yaparak işlemin ilk çalıştığındaki sonucunu tutan, lazy init. sağlayan subclass
  • Decorator/Wrapper: if-else'li işlemleri kendi classlarına taşıyan, runtime'da alg. ekleme veya çıkarma
  • Bridge: İki kalıtım ağacının arasında bağımlılık oluşturma
  • Strategy: Runtime'da alg. değiştirme. VIP account, vb özel işlemler.
  • Observer/Pub-Sub: Abonelik. Bir class tek metotla abonelerine bilgilendirme yapar.
  • Chain of Responsibility: Supervisor / successor hiyerarşisi ile handle edilmesi
  • Memento: Undo için nesne içinde state tutan başka nesne tutarak buradan state'i geri yüklemek
  • Template Method: Bir işlemin adımlarını soyut metot yaparak somut sınıflarda doldurmak
  • State: Runtime sırasında state değişimi için
  • Mediator: Classların iletişimini sağlayan başka bir class olması
  • Command/Action/Transaction/Producer-Consumer: Komutları class olarak wrapleyip başka class tarafından çalıştırılmasını sağlar. Böylece metotları queue'ya atma, undo desteği verme vb. imkanlar elde edilir.
  • Visitor: Nesneler ile onlara yapılacak işlemleri soyutlayıp ayırma
  • Dependency Injection: Bir katmanda diğerine ait nesneleri new() ile çağırmaz, parametre ile dışarıdan alır. IoC container ile runtime binding yapılabilir.
  • Null Object: Bir işlem yapılmasın diye içi boş bir türev singleton olarak yaratılabilir. Böylece parametre olarak null verilmemiş olur.
  • Multiton: Belirli parametreler verildiğinde hep aynı instance'ı verir.