Singleton Pattern Nedir?
Singleton Pattern, bir sınıftan yalnızca bir tane (tekil) nesne oluşturulmasına izin veren bir yazılım tasarım desenidir.
Bu desenle bir sınıfın:
-
Tek bir örneği olur (instance)
-
Bu örneğe global erişim sağlanır
🍵 Basit bir benzetme:
Bir projede sadece bir adet veritabanı bağlantısına ihtiyacınız varsa, her sayfa için yeniden bağlantı oluşturmak yerine tek bir örnek üzerinden işlem yapmak daha doğrudur. İşte Singleton burada devreye girer.
Singleton Ne İçin Kullanılır?
-
Veritabanı bağlantısı: Uygulama boyunca bir tane yeterlidir.
-
Logger (Kayıt tutucu): Tüm işlemler aynı günlük üzerinden yazılır.
-
Cache yönetimi: Tek merkezden önbellek işlemleri yapılır.
-
Uygulama ayarları (config): Tüm dosyalar aynı ayarları kullanır.
Singleton Kullanılan Gerçek Proje Türleri
Proje Türü | Kullanım Nedeni |
---|---|
🛒 E-Ticaret Sistemleri | Veritabanı bağlantısı, log yönetimi tekil olur |
📊 Raporlama Panelleri | Tek noktadan veri çekme, kayıt tutma |
🧠 Yapay Zeka Uygulamaları | Model yüklemeleri tek örnekle yapılır |
🧾 Fatura / Muhasebe Yazılımları | Ayarlar ve oturum bilgileri tek örnekle tutulur |
PHP ile Singleton Pattern Uygulaması
Aşağıda bir veritabanı sınıfı örneği ile Singleton yapısının nasıl çalıştığını gösteriyoruz.
<?php
/** Database.php */
class Database {
private static $instance = null;
private $connection;
// Constructor private: dışarıdan erişilemez
private function __construct() {
$this->connection = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
}
// Sadece bir örnek döner
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new Database();
}
return self::$instance;
}
// Bağlantıyı dışarı verir
public function getConnection() {
return $this->connection;
}
// Clone edilmesi engellenir
private function __clone() {}
private function __wakeup() {}
}
<?php
/** index.php */
require_once 'Database.php';
// Singleton kullanımı
$db1 = Database::getInstance()->getConnection();
$db2 = Database::getInstance()->getConnection();
if ($db1 === $db2) {
echo "Aynı veritabanı bağlantısını kullanıyorlar.";
} else {
echo "Farklı bağlantılar.";
}
Singleton Kullanırken Dikkat Edilmesi Gerekenler
-
Global state yönetimi zordur. Çok fazla singleton kullanmak karışıklık yaratabilir.
-
Test yazımı zorlaşabilir. (Mocklama için ekstra çaba gerekebilir.)
-
Bağımlılık Enjeksiyonu (DI) ile birlikte dikkatli kullanılmalıdır.
Singleton Deseni Ne Sağlar?
-
Kaynak tüketimini azaltır (örneğin: çoklu veritabanı bağlantılarının önüne geçer)
-
Kontrolü merkezileştirir
-
Projenin belirli bölümlerinde tek bir kapıdan erişim sağlar
Eğer bir nesnenin sadece bir defa oluşturulması ve her yerde aynı kalması gerekiyorsa, Singleton en doğru seçimdir.