Tasarım Desenleri(Design Pattern)

Fatma Delen
4 min readNov 1, 2020

--

Merhabalar 🙋🏽,

Bugün sizlere yazılım tasarım desenlerinden bahsedeceğim.

Tasarım desenleri, yazılım geliştiricilerin zaman içerisinde deneme yanılma yolu ile oluşturmuş oldukları yazılım geliştirme teknikleridir. Burada önemli olan 2 konu vardır; tekrar kullanılabilirlik ve esneklik.

Genel olarak tasarım kalıpları:
• Creational Patterns (Oluşturucu Kalıplar)
• Structural Patterns (Yapısal Kalıplar)
• Behavioral Patterns (Davranışsal Kalıplar) olarak ayrılır.

Creational Patterns (Oluşturucu Tasarım Kalıpları)

“Creational grubundaki desenler bir yada daha çok nesnenin çeşitli şekillerde oluşturulması ile ilgili desenlerdir.”

1 - Singleton : Bir sınıfın tek bir örneğini oluşturmak için kullanılır.(Database erişim işlemleri gibi tekrar tekrar nesne oluşturulmaması gereken durumlar vb. ) Sistem çalıştığı sürece ikinci bir örnek oluşturulamaz. Çok istemcili sistemlerde örnek oluşturulurken oluşturulacak objenin kilitlenmesi(lock) gerekir eğer kilitleme(lock) yapılmaz ise birden fazla örnek olmuş olur.

Tek nesne yaratılmasını garanti etmenin yolu şudur: statik üye elemanları

Örnek:

package com.fatmadelenn.designpattern.singleton;

public class Singleton {

private static Singleton object = new Singleton();

private Singleton() {
}

public static Singleton getObject() {
return object;
}
}

Gördüğünüz üzere nesne ilk olarak sınıf belleğe yüklendiğinde değil de o nesneyi ilk defa kullanmak istediğimizde yaratılıyor.

İlgili nesneyi her istediğimizde yeni bir nesnenin yaratılmaması için:

package com.fatmadelenn.designpattern.singleton;

public class Singleton {

private static Singleton object;


private Singleton() {
}

public static Singleton getObject() {
if(object == null){
object = new Singleton();
}
return object;
}
}

2 -Abstract Factory : Birbirleriyle ilişkili ya da birbirlerine bağlı olan nesnelerin oluşturulmasını en etkin bir şekilde çözmeyi hedefler. Amacı belirli sınıfların içerdiği ortak arayüzü soyut bir sınıf ya da arayüz olarak tasarlamaktır. Bütün nesne oluşturma işlemi arayüzler üzerinden gerçekleşir.

İstemci doğrudan somut sınıfı kullanmaz. Asıl ürüne erişmek istediğinde onun için tanımlı olan arayüz ile konuşur. Böylelikle ürün ailesindeki değişiklikler istemci kodunda herhangi bir değişikliğe ihtiyaç duymaz. Aynı zamanda daha test edilebilir bir yapı ortaya çıkmış olur.

Structural Patterns (Yapısal Tasarım Kalıpları)

“Structural grubundaki desenler nesnelerin birbiri ile olan ilişkisini konu alır.”

1 -Facade : Var olan bir nesneye yeni bir yüz katma, yeni bir cephe katma anlamında kullanılmaktadır. Yani işlemleri yerine getirecek nesnenin kod karmaşasına bulaşmamasını sağlar.

İşlemleri yerine getirecek olan nesne alt sisteme direkt erişmeyip, bu alt istemi kullanan facade nesnesi(arayüz) üzerinden işlem yapmaktadır. Böylece katmanlar birbirinden bağımsız olarak geliştirilebilirler. Yani facade sınıfı ortadan kaldırıldığında bile sistem çalışır durumda olmalıdır.

2 -Adapter: Birbiriyle ilişkisi olmayan interfacelerin birlikte çalışmasını sağlar. Bu işlem bir sınıfın interface’inin diğer sınıfın interface’ine dönüştürülerek sağlanır. Bu sayede varolan modül değiştirilmeden sisteme yeni modüller eklenir. Facade ile ortak özelliği ikisi de farklı bir arayüz sunmaktadır, farkı ise adapter sisteme yeni özellikler katarken; facade sistemi basitleştirip kod karmaşasından korur.

Bu pattern, hali hazırda yazılmış olup belli işlevleri gören kodların tekrar yazılmadan, yeni sisteme uyarlanıp entegre edilerek kullanılmasını sağlar.

 — Hedef Sınıf(Target): Adapte olunması gereken sistem arayüzü.
 — Adapter: Mevcut sistem arayüzünü gerçekleyen ara sınıf.
 — Adaptee: Sisteme entegre çalışması istenen parça sınıf
 — Client: Sistemi kullanan sınıf. (Bu sınıf arkada olup biten bu işlemleri bilmez.)

Behavioral Patterns (Davranışsal Tasarım Kalıpları)

“Behavioral grubundaki desenler nesneler arasındaki bağlantıyı ayarlar.”

  • Chainof Responsibility • Command • Mediator • Memento • Observer • Strategy • Template • Visitor

1 -Observer: Bir nesnede meydana gelen değişiklikleri bu nesnede bulunan nesnelere(gözlemci) bildiren tasarım desenidir. Yani seçilen sınıf değiştiğinde, diğer nesnelere haber verilir ve diğer nesneler kendilerini günceller. Örnek verecek olursam : Online satış yapan sitelerde ürüne üye olan kullanıcıların üründe yapılan herhangi bir değişiklik sonucu bilgilendirilmesi amacıyla gönderilen bildirimler observer’a örnek verilebilir.

— Observer: Bütün gerçek observer sınıflarının gerçeklemesi gereken arayüz.
— ConcreteObserver: Gerçekleştirilmiş bir gözlemci sınıfı.

2- Chain Of Responsibility: Bu tasarım deseni tek bir işi yapmak için birden fazla sorumluluğun bulunduğu durumlarda bu işlemleri bir zincir haline getirip sınıflara bölmeye yarar. Sınıflar hangi sırayla çalışacaklarını bilmezler, ama hangi durumlarda çalışacaklarını bilirler. Sınıf aynı zamanda, kendinden sonra hangi sınıfın çalışması gerektiğini de bilir.

 — Handler: Sorumluluk zincirindeki tüm sınıfların türediği soyut sınıftır.
 — Receivers:
Zincirde bulunan ve Handler soyut sınıfından türeyen sorumluluğu yerine getiren sınıflar.
 — Sender:
Bu zincirin hangi sırayla oluşturulacağına karar veren ve işlemleri tetikleyen sınıftır.

Bu makaleyi buraya kadar okuduğunuz için teşekkür ederim 😇.

Kaynaklar:

--

--