Soru, görüş ve önerileriniz için;

contact@fatih-karakus.com

Singleton Design Pattern

Singleton Design Pattern

Singleton tasarım deseni, sadece bir örneğin oluşturulmasını ve bu örneğe global erişim sağlanmasını sağlayan bir tasarım desenidir. İşleyiş olarak çoğu yazılım dilinde benzer şekilde kullanılmaktadır. Bu ve bundan sonraki tasarım kalıpları yazılarında ben PHP kullanarak  devam edeceğim. Singleton tasarım deseni, özellikle bir nesnenin tek bir örnekle sınırlanması gereken durumlarda kullanışlıdır ve projelerinizdeki tekrarlayan örneklerin etkin bir şekilde yönetilmesini sağlar.

Singleton Sınıfının Oluşturulması

  • Singleton sınıfı, tek bir örneğin kontrolünü ve paylaşımını sağlar.
  • Sınıfın yapıcısını (constructor) özel olarak tanımlayarak, dışarıdan örneklere erişimi engelleriz.
class Singleton {
    private static $instance;
    
    private function __construct() {
        // Özel yapıcı fonksiyon, dışarıdan erişimi engeller
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new Singleton();
        }
        return self::$instance;
    }
}

Singleton Örneğine Erişim

  • Singleton sınıfını kullanarak, örneğe erişim sağlayabiliriz.
  •  `getInstance()` metodunu çağırdığımızda, önceki bir örneğin zaten oluşturulup oluşturulmadığını kontrol ederiz.
  • Mevcut bir örneği varsa onu döndürür, aksi takdirde yeni bir örnek oluşturur ve döndürür.
// Singleton sınıfının kullanımı
$singletonInstance1 = Singleton::getInstance();
$singletonInstance2 = Singleton::getInstance();

var_dump($singletonInstance1 === $singletonInstance2); // true

Bir kaç örnek ile iyice pekiştirmeye çalışalım;

Örnek 1: Veritabanı Bağlantısı

class Database {
    private static $instance;
    private $connection;
    
    private function __construct() {
        $this->connection = new PDO('mysql:host=localhost;dbname=mydatabase', 'username', 'password');
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new Database();
        }
        return self::$instance;
    }
    
    public function getConnection() {
        return $this->connection;
    }
}

$db = Database::getInstance();
$connection = $db->getConnection();

Örnek 2: Sistem Ayarları Yönetimi

class Config {
    private static $instance;
    private $settings;
    
    private function __construct() {
        $this->settings = [
            'app_name' => 'My App',
            'api_key' => '123456789',
            // Diğer ayarlar
        ];
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new Config();
        }
        return self::$instance;
    }
    
    public function getSetting($key) {
        return $this->settings[$key] ?? null;
    }
}

$config = Config::getInstance();
$appName = $config->getSetting('app_name');

Örnek 3: Kullanıcı Oturum Yönetimi

class Session {
    private static $instance;
    private $data;
    
    private function __construct() {
        session_start();
        $this->data = &$_SESSION;
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new Session();
        }
        return self::$instance;
    }
    
    public function set($key, $value) {
        $this->data[$key] = $value;
    }
    
    public function get($key) {
        return $this->data[$key] ?? null;
    }
}

$session = Session::getInstance();
$session->set('user_id', 123);
$userId = $session->get('user_id');

Sonuç olarak, Singleton tasarım deseni, tek bir örneğin kontrolünü ve paylaşımını sağlar. Bu tasarım deseni, bir nesnenin sadece bir kez oluşturulmasını ve global erişimin sağlanmasını gerektiren durumlarda kullanışlıdır. Örneklerle beraber Singleton tasarım deseninin nasıl uygulandığını ve farklı senaryolara nasıl uygun hale getirilebileceğini gösterdim. Singleton tasarım deseni, tekrarlayan örneklerin etkin bir şekilde yönetilmesini sağlar ve PHP projelerinizde daha verimli ve esnek bir yapı oluşturmanıza yardımcı olur.