CodeBlanks Logo Icon CodeBlanks

Singleton deseni

PHP kursu · İleri seviye · Ders 81/92

Bir sınıftan yalnızca bir örnek oluşturan Singleton desenini öğrenirsin.

Singleton ne yapar?

Singleton deseni bir sınıftan yalnızca bir örnek (instance) var olmasını guarantee eder. Bu örnek genelde veritabanı bağlantısı, ayar yöneticisi veya günlük (logger) gibi paylaşılan kaynaklar için kullanılır.

Desenin özü iki adımda: kurucu yöntem gizlenir (dışarıdan new ile örnek alınamaz) ve statik bir yöntem tek örneği döndürür. Bu yöntem örneği ilk çağrıda oluşturur, sonraki çağrılarda aynı örneği verir.

Gizli kurucu ve static getInstance

Singleton uygulamak için önce kurucu yöntemi gizlersin: private function __construct() {}. Bu, dışarıdan new Singleton() çağrısını engeller; böylece örnek sayısı denetim altında kalır.

Sonra statik bir getInstance yöntemi yazarsın. Bu yöntem sınıfın içindeki private static bir alana bakar; alan null ise yeni örnek oluşturur ve alana yazar, değilse var olan örneği döndürür. Böylece her çağrıda aynı örnek gelir.

Uygulama Singleton sınıfını yaz ve aynı örneği göster

Bir Singleton sınıfı yaz. Kurucu yöntem private olsun; statik getInstance yöntemi tek örneği döndürsün. İki kez Singleton::getInstance() çağır, aynı örneği alıp almadığını echo $a === $b ? 'aynı' : 'farklı'; ile yazdır.

Örnek çözümü göster
Singleton { return self::$instance ??= new Singleton(); } yaz. Sonra $a = Singleton::getInstance(); $b = Singleton::getInstance(); echo $a === $b ? 'aynı' : 'farklı';
Örnek çözüm:
<?php
class Singleton {
    private static ?Singleton $instance = null;
    private function __construct() {}
    public static function getInstance(): Singleton {
        return self::$instance ??= new Singleton();
    }
}
$a = Singleton::getInstance();
$b = Singleton::getInstance();
echo $a === $b ? 'aynı' : 'farklı';

Kendini test et

  1. Singleton deseni neyi guarantee eder?

    • Sınıfın daha hızlı çalışmasını
    • Tek bir örnek olduğunu (örnek: veritabanı bağlantısı)
    • Tüm yöntemlerin gizlenmesini
    • Sınıfa yeni alan eklenmesini
    Cevabı göster

    Tek bir örnek olduğunu (örnek: veritabanı bağlantısı) — Doğru. Singleton bir sınıftan yalnızca bir örnek olmasını guarantee eder.

  2. Tek örneği döndüren yöntem

    <?php
    class Singleton {
        private static ?Singleton $instance = null;
        private function __construct() {}
        public static ____(): Singleton {
            return self::$instance ??= new Singleton();
        }
        public function tag(): string { return 'S'; }
    }
    $s = Singleton::getInstance();
    echo $s->tag();
    
    Cevabı göster
    <?php
    class Singleton {
        private static ?Singleton $instance = null;
        private function __construct() {}
        public static getInstance(): Singleton {
            return self::$instance ??= new Singleton();
        }
        public function tag(): string { return 'S'; }
    }
    $s = Singleton::getInstance();
    echo $s->tag();
    
  3. Singleton kavramlarını eşleştir

    __construct
    gizli kurucu
    getInstance
    tek örneği döndürür
    self::$instance
    örneği saklar
    private
    dışarıdan new'i engeller

İleri seviye bölümündeki tüm dersler