Design Patterns (Tasarım Kalıpları)

Emre Değirmenci
NSIstanbul
Published in
3 min readJun 9, 2018

Nedir ?

Aslında aşağıdaki soruların cevaplarını ararken girdiğimiz yol, bizi tasarım prensipleri ve kalıplarına çıkarır.

  • İyi bir yazılımı etkili bir şekilde nasıl tasarlayabiliriz ?
  • Geçmiş tecrübelerimizi, gelecek projelerimize nasıl aktarabiliriz ?
  • Yazılımın tasarımı esnasında, esneklik ve verimlilik gibi iyi özelliklere nasıl sahip olabiliriz ?

Tarihçe

Eric Gamma, Richard Helm, Ralph Johnson ve John Vlissides 1995’te “Design Patterns : Elements of Reusable Object – Oriented Software” kitabını çıkardılar. Bu dörtlü ayrıca “Gang of Four” olarak da bilinir.

Bu dörtlü kitaplarında 3 kategoride 23 farklı kalıba yer vermişlerdir.

*Ben en sık kullanılan kalıpları belirttim.

Creational

Nesneleri yaratmakta kullanılan 5 adet tasarım kalıbı

Structural

Nesneler arasındaki yapıları ifade eden ilişkilerden 7 adet tasarım kalıbı

Behavioral

Nesnelerin çalışma zamanına ait davranışlarını değiştirmek için oluşturulan tasarımlardan 11 adet tasarım kalıbı

Gang of Four Sistematiği

Creational Kalıplar

Yazılım sistemindeki nesnelerin yaratılışı hakkında yol gösterirler.

  • Factory Method
  • Singleton
  • Abstract Factory
  • Builder

Structural Kalıplar

Yazılım sistemindeki nesnelerin birbirleriyle olan ilişkilerini gösteren kalıptır.

  • Adapter
  • Decorator
  • Facade
  • Proxy

Behavioral Kalıplar

Nesne davranışlarını takip eden kalıptır.

  • Iterator
  • Observer
  • Memento
  • Mediator

Factory Method Pattern

Nedir ?

Factory tasarım prensibi, implemente edilecek bir genel classın, çağrılan bileşenlerin isteklerini; bileşenlerin, implemente edilecek genel class hakkında bilgi sahibi olmalarını gerektirmeden belirler.

Örnek verecek olursak, yukarıdaki görselde “Client” olan nesne, “Factory” nesnesini kullanarak ihtiyacı olan “Product” nesnesini elde eder.

“Client” ın istediği tipte yeni nesne oluşturma sürecinin “Factory”
sınıfına aktarılması ile birlikte nesne oluşturma süreci “Client”tan soyutlanmış olur.

Bu sayede “Client”; uygulama içerisinde tamamen
kendi rolüne odaklanmış olup yeni nesnenin nasıl oluşturulacağına dair detaylardan soyutlanmış olur ve bunları bilmek zorunda değildir.

Factory Pattern , genel olarak istemci tarafından istenen nesnenin oluşma sürecini detaylı bilgiye sahip olmadan gerçekleşimini sağlar. (Amerikan Doları’nın üzerindeki işaretler gibi 🤑

Avantajları

Factory tasarım, mantık classını güçlendirip bu classa, hangi classın implemente edileceğini belirler ve uygulamada genişlemesini önler. Ayrıca çağrılan bileşenlerin hangi classın implemente edileceğini (içeriğini) bilmeden base classa güvenmesini sağlar.

Ne zaman kullanmalıyız ?

Bu tasarımı elimizde birden çok classımız olduğunda ve bu classlarımız genel davranış gösteren bir protocolden implemente edileceği zaman kullanmalıyız.

Ne zaman kullanMAmalıyız ?

Paylaşımlı bir base classımız veya genel bir protocolümüz olmadığı zaman kullanmamalıyız. Çünkü factory tasarım kalıbı güvenebileceği bir single type componentı olduğu zaman mantıklı çalışır.

Factory tasarım kalıbının doğru kullanıldığını nasıl anlarız ?

Bu tasarım kalıbı doğru şekilde implemente edildiği zaman, uygun classın bileşenleri, hangi başlangıç classının kullanıldığını bilemezler.

Yaygın risk durumu var mı ?

Hayır yok. Factory kalıbı basitçe implemente edilebilir.

İlişkili olduğu kalıplar nelerdir ?

Factory tasarım kalıbı sıklıkla Singleton tasarım kalıbı ve object pool tasarım kalıbı ile benzer çalışır.

Swift Kod Örnekleri

Evet ilk yazımın sonuna geldik. İkinci yazıda (Adapter Pattern) görüşmek üzere, iyi çalışmalar… 👋🏼

--

--