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
| Desen | Kategori | Temel Slogan |
|---|---|---|
| Singleton | Creational (Yaratımsal) | "Benden sadece bir tane olabilir!" |
| Factory | Creational (Yaratımsal) | "Hangi nesneyi istiyorsan bana söyle, ben üretirim." |
| Observer | Behavioral (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.