Singleton Pattern: Ne İşe Yarar, Nasıl Kullanılır?



Modern yazılım geliştirme sürecinde kullanılan tasarım desenlerinden biri olan Singleton Pattern, özellikle tek bir nesne örneği ile çalışılması gereken durumlarda hayat kurtarıcıdır. Peki Singleton nedir, ne işe yarar, hangi projelerde kullanılır ve PHP ile nasıl yazılır? Tüm detaylarıyla öğreniyoruz.

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:

  1. Tek bir örneği olur (instance)

  2. 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 SistemleriVeritabanı bağlantısı, log yönetimi tekil olur
📊 Raporlama PanelleriTek 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() {}
}


Kullanımı:

<?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.








Related Posts

Singleton Pattern: Ne İşe Yarar, Nasıl Kullanılır?
4/ 5
Oleh