Design Patterns(Tasarım Desenleri) Nedir?

Fatih İzgi
Kodcular
Published in
3 min readNov 6, 2021

Tasarım desenleri, en genel tanımı ile yazılımcıların sıklıkla karşılaştığı problemlere getirilen çözümlerdir. Örneğin bir nesne yaratma işleminde belirli kurallar oluşturmak, karmaşık sistemlerin kullanımlarını kolaylaştırmak veya nesne erişimlerini kontrol altına almak gibi istekleriniz olabilir. Tasarım desenleri sayesinde bu ihtiyaçlarınızı karşılayabilirsiniz. Pek çok yazılımcı tarafından sıklıkla kullanılmaktadır.

NEDEN KULLANILIR ?

Yazılım geliştiriciler, zaman zaman birbirleri ile aynı veya benzer problemler ile karşılaşırlar. Ortak problemlerin çözümü için kullanılan bu yapıları bilmek hem zaman hem de maliyet açısından tasarruf etme imkanı sunar.

Tasarım desenlerinin oluşturulması için pek çok yazılımcı uzun zamanlar boyunca çalışmıştır. Bu yapıların doğruluğu ispatlanmıştır. Bu sebeple, bilinen bir problemin çözümü için farklı yollar aramaktansa bu yapılardan faydalanmak, hata yapma riskini azaltarak size daha güvenilir bir yazılım gerçekleştirme imkanı sunacaktır.

Tasarım desenleri ile problem çözmek, kullanılan programlama dilinden bağımsız olarak gerçekleştirilmektedir. Programlarınızda Java, C# ya da C++ gibi programlama dillerinden hangisini kullandığınızın bir önemi yoktur. Bu desenler, problem çözmek için bir şablon olarak görev yapar. Bu sebeple, yazılımcılar arasında ortak bir iletişim imkanı sunduğunu da söyleyebiliriz. Böylece, tasarım desenlerinin kullanımında kod okunurluğunun yüksek olduğunu tahmin edebilirsiniz. (Not : Elbette bu tanımdan yola çıkarak tasarım desenlerinin hazır algoritma veya program benzeri yapılar olduğunu düşünmemek gerekir. Doğrudan kopyala/yapıştır gibi çözümler hayal etmek doğru olmayacaktır.)

Tasarım desenlerinin projeler içerisinde (gerekli durumlarda)kullanılması, yazılım performansını artıracaktır. Problem ve ihtiyaçlara esnek çözümler ile yaklaştıklarından dolayı daha etkin kodlama yapma imkanı sunarlar.

TASARIM DESENLERİNİN SINIFLANDIRILMASI

Tasarım desenleri 3 ana başlık altında incelenir. (Not : İlerleyen derslerde çok daha ayrıntılı olarak öğreneceğimiz bu yapıları başlangıç olarak inceleyerek fikir sahip olmak, konulara daha rahat hakim olma imkanı sunacaktır.) Bu başlıklar :

1- CREATIONAL(OLUŞTURUCU) DESIGN PATTERNS :

Yazılımda kullanılan nesnelerin sağlıklı oluşturulmasına olabildiğince dikkat edilmelidir. Nesnelerin hangi sınıflarda oluşturulacağı ve nesnelerin oluşturulması sırasında takip edilecek kuralların belirlenmesi yazılım açısından hayati önem taşımaktadır. Oluşturulan nesnelere getirilecek olan güncellemelerin(özellik/davranış ekleme veya çıkarma gibi) daha rahat olması ve yaratılan nesnelerin gerekli durumlarda tekrar kullanılabilir olması yazılım performansını artıran faktörlerdendir. Ayrıca, sınıf tasarımlarının temiz olması ve bağımlılığın azalması da doğru tasarlanmış bir yazılımın önemli şartlarındandır. Creational/Oluşturucu tasarım desenleri, bu problem ve ihtiyaçlara çözümler bularak nesne yaratma ve yönetme işlemleri için kullanılırlar. Bu başlık altında inceleyeceğimiz tasarım desenleri :

1- Singleton Design Pattern

2- Factory Design Pattern

3- Abstract Factory Design Pattern

4- Builder Design Pattern

5- Prototype Design Pattern

2- STRUCTURAL(YAPISAL) DESIGN PATTERNS :

Sınıf tasarımlarının doğru olması, nesne üretimi açısından oldukça değerlidir. Nesneler arası iletişime, hemen her projede oldukça sık karşılaşıldığı düşünülürse, sınıflar arası bağlantıların doğru gerçekleştirilmesinin de ne kadar önemli olduğu tahmin edilebilir. Ayrıca, zaman zaman sınıf ve nesnelerin birleşmesi veya ilişkilendirilmesi (proje yönetimi açısından) bir ihtiyaç haline gelmektedir. Bu birleşmeler ile yeni yapılar oluşturulur ve böylece daha sade modeller elde edilebilir. Structural/Yapısal tasarım desenleri, bu problem ve ihtiyaçlara çözümler bularak sınıfların birleştirilmesi ve daha performanslı yapılar oluşturulması için kullanılırlar. Bu başlık altında inceleyeceğimiz tasarım desenleri :

1- Adapter Design Pattern

2- Flyweight Design Pattern

3- Composite Design Pattern

4- Facade Design Pattern

5- Proxy Design Pattern

6- Decorator Design Pattern

7- Bridge Design Pattern

3- BEHAVIORAL(DAVRANIŞSAL) DESIGN PATTERNS :

Sınıflar, nesnelerin üretim merkezleridir. Sınıf içerisinde nesnenin sahip olacağı özellikler ve davranışlar belirlenir. Biz ise yazılımlarımızı nesneler ve nesneler arası iletişimler ile gerçekleştiririz. Bu sebeple, nesnelere doğru sorumlulukların verilmesi, uygun algoritmaların kullanılması ve nesnelerin doğru yerde doğru işi yapmaları yazılım için hayati önem taşımaktadır. Behavioral/Davranışsal tasarım desenleri, bu problem ve ihtiyaçlara çözümler bularak nesnelerin görev sorumluluklarının düzenlenmesini sağlayarak daha performanslı ve güvenlir yazılımlar oluşturulması için kullanılırlar. Bu başlık altında inceleyeceğimiz tasarım desenleri :

1- Strategy Design Pattern

2- Command Design Pattern

3- Iterator Design Pattern

4- Template Design Pattern

5- Observer Design Pattern

6- Memento Design Pattern

7- Mediator Design Pattern

8- Chain of Responsibility Design Pattern

9- Visitor Design Pattern

10- State Design Pattern

11- Interpreter Design Pattern

--

--