İçeriğe geç
parazade

Singleton Ne Demek?

Yayın: · Son güncelleme:

Singleton Ne Demek? Kısaca

Singleton, bir sınıftan uygulama boyunca yalnızca tek bir nesne (örnek) oluşturulmasını ve bu nesneye her yerden aynı noktadan erişilmesini sağlayan yaratımsal bir tasarım desenidir.

Singleton nedir?
İçindekiler
  1. Singleton ne demek?
  2. Nasıl çalışır?
  3. Nelere dikkat etmeli?

Singleton ne demek?

Singleton, "tek örnek" anlamına gelen bir tasarım deseni. Bir sınıfın programda yalnızca bir kez oluşturulmasını garanti eder ve o tek nesneye ortak bir erişim noktası sunar. Gang of Four kitabında tanımlanan klasik yaratımsal desenlerden biridir.

Bunu bir ofisteki tek yazıcıya benzetebilirsiniz. Herkes çıktı alır ama her çalışan kendine ayrı yazıcı kurmaz; aynı cihazı paylaşır.

Nasıl çalışır?

Desenin temelinde üç parça bulunur. Sınıfın yapıcı metodu dışarıdan çağrılamaz hâle getirilir, sınıf kendi içinde tek bir örneği saklar ve bu örneği döndüren statik bir metot sunar. Metot ilk çağrıldığında nesneyi üretir, sonraki çağrılarda aynı nesneyi geri verir.

Örneğin bir uygulamada ayar dosyasını okuyan bir Ayarlar sınıfı düşünün. Ekranlar bu sınıfı her çağırdığında dosya yeniden okunmaz; ilk okumada oluşan nesne tüm ekranlara dağıtılır. Loglama, veritabanı bağlantı havuzu ve önbellek yöneticisi de sık görülen kullanım alanlarıdır.

Nelere dikkat etmeli?

Singleton kolay uygulandığı için gereğinden fazla kullanılır. Pratikte en sık görülen sorunlar şunlardır:

  • Gizli bağımlılık oluşturur; hangi kodun nesneyi değiştirdiğini izlemek zorlaşır.
  • Birim testinde sahte nesneyle değiştirmek güçtür.
  • Çok iş parçacıklı programlarda iki thread aynı anda nesne üretebilir, bu yüzden kilit ya da hazır dil desteği gerekir.

Birçok ekip bu nedenle singleton yerine bağımlılık enjeksiyonu kullanır. Nesne yine tek olur ama ihtiyaç duyan sınıfa dışarıdan verilir. Kendi projenizde bir sınıfı singleton yapmadan önce "bu nesnenin gerçekten tek olması şart mı?" sorusunu sorun.

Sıkça Sorulan Sorular

Singleton bir anti-pattern mi?

Tek başına kötü değildir ama aşırı kullanıldığında global değişken gibi davranır ve test etmeyi zorlaştırır. Bu yüzden bazı geliştiriciler onu anti-pattern olarak görür; ölçülü kullanıldığında işe yarar.

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

Statik sınıf hiç nesne üretmez, yalnız statik üyeler barındırır. Singleton ise gerçek bir nesnedir; arayüz uygulayabilir, parametre olarak geçirilebilir ve ilk ihtiyaç anında oluşturulabilir.

İlgili terimler