# Singleton Deseni

Adres: https://softwaredictionary.org/tr/terimler/singleton-pattern
Kategori: Yazılım Mimarisi
Son güncelleme: 2026-09-30
İngilizcesi: Singleton Pattern
Okunuşu: singıltın petırn

Kısaca: Singleton deseni, bir sınıfın yalnızca tek bir örneğinin bulunmasını sağlayan ve ona tek, küresel bir erişim noktası sunan oluşturucu bir tasarım desenidir.

## Singleton deseni nedir?

Singleton deseni, bir uygulamada belirli bir sınıftan yalnızca tek bir nesnenin var olabilmesini garanti eder ve tüm koda ona ulaşmak için ortak bir yol verir. Klasik Gang of Four kitabındaki oluşturucu desenlerden biridir. Tipik adaylar; bir yapılandırma nesnesi, bir logger ya da veritabanı bağlantı havuzu gibi doğal olarak tek olan şeylerdir.

Klasik uygulamada constructor private yapılır; böylece başka hiçbir kod `new` çağıramaz, ve genellikle `getInstance()` adlı statik bir metot eklenir. Bu metot nesneyi ilk çağrıldığında oluşturur ve sonraki her çağrıda aynı nesneyi döndürür. JavaScript ve TypeScript'te modüller daha basit bir seçenek sunar: bir modül yalnızca bir kez değerlendirilir, dolayısıyla ondan dışa aktarılan nesne fiilen bütün uygulama için bir singleton'dır.

Bir ülkenin merkez bankası benzetmesi yapılabilir: yalnızca bir tane vardır ve ona ihtiyaç duyan herkes kendi bankasını kurmak yerine aynı kuruma gider. Çok iş parçacıklı (multithreaded) dillerde singleton kodu, iki iş parçacığının aynı anda iki örnek oluşturmaması için dikkatle yazılmalıdır.

Singleton aynı zamanda en çok eleştirilen desenlerden biridir, çünkü özünde gizlenmiş küresel durumdur (global state). Herhangi bir kod ona ulaşabildiği için bağımlılıkları gizler, birim testlerin birbirine durum sızdırmasına yol açar ve nesneyi sahte bir sürümle değiştirmeyi zorlaştırır. Birçok ekip, tek örneği başlangıçta oluşturup dependency injection ile dağıtmayı tercih eder; bu, gizli bağımlılık olmadan tek örnek avantajını korur.

## Önemli noktalar

- Singleton sınıfın küresel bir erişim noktasıyla tam olarak bir örneği vardır.
- Genellikle private bir constructor ve statik `getInstance()` metoduyla kurulur.
- JavaScript'te bir modülden dışa aktarılan nesne singleton gibi davranır.
- Aşırı kullanım, testi zorlaştıran gizli küresel durum yaratır.
- Tek örneği paylaşmak için dependency injection yaygın bir alternatiftir.

## Örnek: TypeScript'te bir singleton sınıfı

```typescript
class Config {
  private static instance: Config | undefined;
  readonly apiUrl = "https://api.example.com";

  private constructor() {} // prevents "new Config()" from outside the class

  static getInstance(): Config {
    if (!Config.instance) {
      Config.instance = new Config(); // created only on first use
    }
    return Config.instance;
  }
}

console.log(Config.getInstance() === Config.getInstance()); // true
```

## Sık sorulan sorular

**Singleton deseni neden anti-pattern sayılıyor?**

Eleştirmenler, herhangi bir kodun okuyabileceği ya da değiştirebileceği küresel durum getirdiği, bağımlılıkları gizlediği ve testlerin birbirini etkilemesine yol açtığı için onu anti-pattern olarak görür. Gerçekten tek olan kaynaklar için ölçülü kullanıldığında yine de pratik bir araçtır.

**Singleton ne zaman kullanılmalı?**

Bağlantı havuzu, önbellek ya da uygulama genelinde yapılandırma gibi tam olarak bir örneğin var olması ve paylaşılması gerektiğinde kullanılır. Yine de o tek örneği bir kez oluşturup dependency injection ile geçirmeyi düşünün.

**Singleton ile statik sınıf arasındaki fark nedir?**

Statik sınıf yalnızca statik metotları gruplar ve hiç örneklenmez; singleton ise arayüzleri uygulayabilen, durum tutabilen ve değer olarak dolaştırılabilen gerçek bir nesnedir. Bu, singleton'ı bir dizi statik fonksiyondan daha kolay değiştirilebilir ya da genişletilebilir kılar.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
