Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?

Cevap

Singleton, bir sınıfın uygulama boyunca tek bir örneği olmasını garanti eder ve ona global bir erişim noktası sağlar. Tipik örnekler: yapılandırma, logger, bağlantı havuzu.

Thread-safe uygulama (Java)

// Double-checked locking: volatile şart
public final class Config {
    private static volatile Config instance;
    private Config() { /* dosyadan yükle */ }

    public static Config getInstance() {
        if (instance == null) {
            synchronized (Config.class) {
                if (instance == null) {
                    instance = new Config();
                }
            }
        }
        return instance;
    }
}

// Daha basit ve güvenli: enum singleton
public enum Registry {
    INSTANCE;
    public void register(String key) { ... }
}

Kilitsiz ilk kontrolde iki thread aynı anda null görüp iki örnek oluşturabilir; bu yüzden senkronizasyon gerekir. volatile olmadan başka bir thread yarı kurulmuş nesneyi görebilir. Statik alan başlatma veya holder sınıfı deseni de JVM'in sınıf yükleme garantisiyle güvenlidir.

Neden anti-pattern sayılır?

  • Gizli global durum: bağımlılık imzada görünmez, kod nereden ne değiştiğini anlamak zorlaşır.
  • Test zorluğu: sahte (mock) bir örnekle değiştirmek zordur; testler arasında durum sızar.
  • Single Responsibility ihlali: sınıf hem işini yapar hem kendi yaşam döngüsünü yönetir.
  • Dağıtık sistemlerde "tek örnek" yalnızca bir süreç içinde geçerlidir.

Modern alternatif

Sınıfı normal yazın, DI container'da singleton ömrüyle kaydedin (Spring bean'leri varsayılan olarak böyledir). Böylece tek örnek garantisi korunur ama bağımlılık açıkça enjekte edilir ve testte değiştirilebilir.

  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  6. Interface ile abstract class arasındaki fark nedir?KolayOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle