Tasarım Desenleri: Yazılım Geliştirme Sürecinizi Dönüştürün

Şeniz Akbulut
4 min readFeb 6, 2024

Yazılım geliştirme sürecinde, tekrar eden problemleri çözmek ve esnek, sürdürülebilir kodlar oluşturmak için kullanılan tasarım desenleri önemli bir rol oynar. Aşağıda, yaygın olarak kullanılan tasarım desenlerini ve özelliklerini detaylı bir şekilde inceleyeceğiz:

Creational Patterns (Oluşturucu Desenler):

1. Singleton Pattern:

Amaç: Yalnızca bir örneğe sahip olmayı garanti eder.

Özellikler:

  • Sınıfın tek bir örneğine erişim noktası sağlar.
  • Genellikle yapılandırma ayarları ve veritabanı bağlantıları gibi paylaşılan kaynaklar için kullanılır.
  • İş parçacığı güvenliği ve tembellik gibi farklı varyasyonları vardır.

2. Factory Method Pattern:

Amaç: Alt sınıfların belirli bir nesneyi oluşturmak için kullanılan bir metodu uygulamasına izin verir.

Özellikler:

  • Nesne oluşturma sürecini alt sınıflara devreder.
  • İlgili alt sınıfların hangi nesneleri oluşturacağını belirler.
  • Kullanımı kolay ve genişletilebilir kod yazmayı sağlar.

3. Abstract Factory Pattern:

Amaç: İlgili nesnelerin ailesini oluşturmak için soyut bir arayüz sağlar.

Özellikler:

  • İlgili nesnelerin gruplarını oluşturmak için kullanılır.
  • Kullanıcıların spesifik bir alt sınıfı kullanmadan nesneleri oluşturmasına izin verir.
  • Bir fabrika nesnesi üzerinden farklı nesnelerin yaratılmasını sağlar.

4. Builder Pattern:

Amaç: Karmaşık nesnelerin adımlı bir şekilde oluşturulmasını sağlar ve nesnenin farklı özelliklerini ayarlamak için kullanılır.

Özellikler:

  • Nesnenin inşa edilme sürecini adım adım tanımlar.
  • Farklı nesne yapılarını dinamik olarak oluşturmayı sağlar.
  • Bir nesnenin oluşturulması ve temsil edilmesi sürecini ayırır.

5. Prototype Pattern:

Amaç: Mevcut bir nesnenin kopyalarını üretir.

Özellikler:

  • Bir nesnenin kopyasını oluşturmak için bir prototip nesnesini kullanır.
  • Klonlama işlemi ile nesne oluşturmayı sağlar.
  • Yeni nesneler oluşturmak için alt sınıfların kullanılmasına izin verir.

Structural Patterns (Yapısal Desenler):

6. Adapter Pattern:

Amaç: İki farklı arayüz arasında uyumsuz sınıflar arasında etkileşimi sağlar.

Özellikler:

  • Farklı arayüzler arasında etkileşimi sağlamak için kullanılır.
  • Varolan bir sınıfın arayüzünü değiştirmeden onu kullanmayı sağlar.
  • Bir adaptör sınıfı üzerinden etkileşim sağlar.

7. Bridge Pattern:

Amaç: Soyutlamayı uygulamanın ayrı parçalarından ayırır, böylece bunlar bağımsız olarak değiştirilebilir.

Özellikler:

  • İki ayrı hiyerarşik yapıyı birbirinden ayırır.
  • Değişen gereksinimlere yanıt olarak yapıyı değiştirmeyi kolaylaştırır.
  • Genişletilmiş bir yapıyı uygulamanın ayrı parçalarından ayırır.

8. Composite Pattern:

Amaç: Nesnelerin hiyerarşik bir ağacı oluşturması için kullanılır.

Özellikler:

  • Nesnelerin bir hiyerarşik ağaç oluşturmasına izin verir.
  • Bir bileşen nesnesi, tek bir nesne veya aynı arayüzü uygulayan bir grup nesne olabilir.
  • Bileşenlerin aynı muameleye tabi olmasını sağlar.

9. Decorator Pattern:

Amaç: Nesnelere dinamik olarak ek özellikler ekler.

Özellikler:

  • Bir nesneye ek özellikler eklemek için kullanılır.
  • Nesnenin temel davranışını değiştirmeden onu genişletir.
  • Kompozisyonu tercih eder ve sınıfların aşırı yüklenmesini önler.

10. Facade Pattern:

Amaç: Karmaşık bir alt sistemi basitleştirilmiş bir arayüzle kaplar.

Özellikler:

  • Bir alt sistemi daha kolay kullanılabilir hale getirir.
  • İstemcilerin alt sistemle doğrudan etkileşimini önler.
  • Sistemin karmaşıklığını gizler ve basitleştirir.

11. Flyweight Pattern:

Amaç: Birçok küçük nesneyi paylaşarak bellek kullanımını azaltır.

Özellikler:

  • Nesnelerin paylaşılmasını sağlar.
  • Özellikle büyük miktarda nesne oluşturma gereksinimleri için kullanılır.
  • Bellek kullanımını optimize eder ve performansı artırır.

12. Proxy Pattern:

Amaç: Başka bir nesneye erişimi kontrol eden bir aracı sağlar.

Özellikler:

  • Erişimi kontrol etmek, nesneye ek işlevsellik eklemek veya gerçek nesne oluşturma maliyetini azaltmak için kullanılır.
  • İstemciler ve gerçek nesne arasındaki aracıdır.
  • Uzaktan, geçici veya maliyetli nesneleri temsil eder.

Behavioral Patterns (Davranışsal Desenler):

13. Chain of Responsibility Pattern:

Amaç: İsteklerin bir dizi nesne tarafından işlenmesine izin verir.

Özellikler:

  • İstekleri işlemek için bir zincir oluşturur.
  • Zincirdeki her nesne, isteği işleyip işleyemeyeceğini belirler.
  • İsteği işleyen nesne zincirdeki bir sonraki nesneye iletir.

14. Command Pattern:

Amaç: Bir isteği nesne olarak kapsüler ve parametrelendirilmiş bir şekilde temsil eder.

Özellikler:

  • İstekleri bir nesne olarak kapsüler ve parametrelendirilmiş bir şekilde temsil eder.
  • İstemcinin bir nesneyi bir isteğe dönüştürmesine olanak tanır.
  • İstekleri sırayla sıralamak, kaydetmek veya geri almak için kullanılır.

15. Interpreter Pattern:

Amaç: Dilin bir gramerini yorumlamak için kullanılır.

Özellikler:

  • Bir dili yorumlamak için kullanılır.
  • Dilin her bir bileşenini temsil eden bir sınıf hiyerarşisi vardır.
  • Belirli bir dil için yorumlayıcıları uygulamak kolaydır.

16. Iterator Pattern:

Amaç: Bir koleksiyonun öğelerine erişmek ve üzerinde döngü oluşturmak için kullanılır.

Özellikler:

  • Koleksiyonun yapısını gizler ve koleksiyonun öğelerine erişimi standartlaştırır.
  • Döngü oluşturmak için kullanılır ve koleksiyonun iç yapısını bilmek gerekmez.
  • Koleksiyonun elemanlarına erişim yöntemlerini tanımlar.

17. Mediator Pattern:

Amaç: İlgili nesneler arasındaki etkileşimi düzenler ve kontrol eder.

Özellikler:

  • Nesneler arasındaki sıkı bağı azaltır.
  • İlgili nesnelerin doğrudan birbirleriyle iletişim kurmasını engeller.
  • Bir aracı kullanarak nesneler arasındaki iletişimi kolaylaştırır.

18. Memento Pattern:

Amaç: Nesne durumunu kapsüler ve geri yükleme işlemi sağlar.

Özellikler:

  • Bir nesnenin durumunu kaydeder ve geri yükler.
  • Nesnenin iç durumunu dışarıya açmaz ve bu durumu korur.
  • Geri alma işlemi için kullanılır ve nesnenin geçmiş durumlarına erişim sağlar.

19. Observer Pattern:

Amaç: Bir nesnenin durumunda değişiklik olduğunda bağımlı nesnelere bildirim gönderir.

Özellikler:

  • Bir nesnenin durumunda değişiklik olduğunda diğer nesneleri günceller.
  • Bağımlılıkları azaltır ve nesneler arasında gevşek bağlantı sağlar.
  • Çoklu yayın (broadcast) desteği sağlar.

20. State Pattern:

Amaç: Bir nesnenin davranışını durumuna bağlı olarak değiştirir.

  • Özellikler:
  • Nesnenin farklı durumlarını temsil eden bir dizi sınıf vardır.
  • Nesnenin davranışını durumuna bağlı olarak değiştirir.
  • Durumlar arasında geçişi kolaylaştırır ve durumların yönetimini merkezi hale getirir.

21. Strategy Pattern:

Amaç: Belirli bir algoritmayı temsil eden bir nesne kullanarak bir algoritmayı değiştirir.

Özellikler:

  • Farklı algoritmaları kapsüler ve değiştirilebilir hale getirir.
  • Çalışma zamanında algoritmanın değiştirilmesine izin verir.
  • Bir algoritmayı diğerleriyle değiştirmek için kullanılır.

22. Template Method Pattern:

Amaç: Bir algoritmanın yapısını tanımlar ancak bazı adımları alt sınıflara bırakır.

  • Özellikler:
  • Ortak bir algoritma şablonu sağlar ve bazı adımları alt sınıflara bırakır.
  • Alt sınıflar, bir algoritmanın belirli adımlarını uygular.
  • Algoritmanın belirli kısımlarının değiştirilmesine izin verir.

23. Visitor Pattern:

Amaç: Bir nesnenin yapısını (örneğin, bir koleksiyonun elemanlarını) değiştirmeden, onunla ilgili yeni operasyonlar eklemenizi sağlar.

Özellikler:

  • Bir nesne yapısını temsil eden sınıfların hiyerarşisini kapsüler.
  • Yeni operasyonlar eklemek için kullanılır ve mevcut sınıfları değiştirmez.
  • Ziyaretçi nesnesi, nesne yapısını dolaşır ve her bir elemana belirli operasyonları uygular.

SONUÇ:

Bu, yazılım geliştirme sürecinde sıklıkla kullanılan tasarım desenlerini ve özelliklerini detaylı bir şekilde açıklar. Her bir desenin farklı bir problemi çözmek için tasarlandığını unutmayın ve hangi desenin hangi senaryolarda kullanılacağını anlamak önemlidir. Tasarım desenleri, kodunuzu daha modüler, esnek ve sürdürülebilir hale getirirken, aynı zamanda tasarımın daha iyi anlaşılmasına da yardımcı olabilir.

--

--

Şeniz Akbulut

Şeniz fullmoonborn of the House Akbulut, first of her name.The Princess of Her Father, Diva Queen of her mother , breaker of hearth , mother of Fadıls.