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