Design Patterns: Singleton, Factory ve Observer Desenleri Örnekleri

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16
Java Design Patterns: Standart Çözümlerin Gücü



1. Singleton (Tek Nesne) Deseni​


Amaç: Bir sınıftan uygulama ömrü boyunca sadece bir adet nesne üretilmesini ve bu nesneye her yerden erişilmesini garanti altına almaktır.

Kullanım Alanı: Veritabanı bağlantı yönetimi, Loglama sınıfları veya Ayar (Configuration) dosyaları.

Mantık: Constructor private yapılır, nesne sınıfın içinde static olarak tutulur.

Java:
public class VeritabaniBaglantisi {
private static VeritabaniBaglantisi instance;

private VeritabaniBaglantisi() {} // Dışarıdan "new" yapılamaz

public static synchronized VeritabaniBaglantisi getInstance() {
    if (instance == null) {
        instance = new VeritabaniBaglantisi();
    }
    return instance;
}

}

2. Factory (Fabrika) Deseni​


Amaç: Nesne oluşturma mantığını istemciden (client) gizlemek ve nesne üretimini tek bir merkezden yönetmektir. İstemci, hangi somut sınıfın üretildiğini bilmez; sadece bir arayüz (interface) üzerinden konuşur.

Kullanım Alanı: Farklı tipte bildirimler (SMS, Email, Push) gönderen bir sistem.

Java:
// Arayüz
interface Bildirim { void gonder(); }

// Somut Sınıflar
class SmsBildirim implements Bildirim { public void gonder() { System.out.println("SMS Gidiyor..."); } }
class EmailBildirim implements Bildirim { public void gonder() { System.out.println("Email Gidiyor..."); } }

// Fabrika Sınıfı
class BildirimFabrikasi {
public static Bildirim olustur(String tip) {
if (tip.equals("SMS")) return new SmsBildirim();
if (tip.equals("EMAIL")) return new EmailBildirim();
return null;
}
}

3. Observer (Gözlemci) Deseni​


Amaç: Bir nesnenin durumunda değişiklik olduğunda, ona bağlı olan diğer nesnelerin (abonelerin) otomatik olarak haberdar edilmesini sağlamaktır.

Kullanım Alanı: Youtube kanalı aboneliği, borsa takip sistemleri veya haber siteleri.

Java:
interface Abone { void guncelle(String haber); }

class HaberKanali {
private List<Abone> aboneler = new ArrayList<>();

public void aboneEkle(Abone a) { aboneler.add(a); }
public void haberYayinla(String haber) {
    for (Abone a : aboneler) a.guncelle(haber);
}

}

Desenlerin Karşılaştırma Özeti​


DesenKategoriTemel Slogan
SingletonCreational (Yaratımsal)"Benden sadece bir tane olabilir!"
FactoryCreational (Yaratımsal)"Hangi nesneyi istiyorsan bana söyle, ben üretirim."
ObserverBehavioral (Davranışsal)"Bir şey değişirse bana haber ver!"



Sonuç

Tasarım kalıpları, tekerleği yeniden icat etmenizi engeller. Ancak dikkatli olunmalı; her sorunu bir kalıpla çözmeye çalışmak "Over-engineering" (gereksiz karmaşıklık) yaratabilir. Kalıplar birer amaç değil, kodunuzu güzelleştiren araçlardır.
 
Geri
Üst