Bir Tasarım Şablonu: Singleton Pattern; nedir ne değildir ?

PHP ile singleton pattern şablonuyla class tasarlayıp kullanalım. Önce biraz açıklama yapayım:

Tasarım şablonlarından biri olan Sigleton Pattern class yaratmakla ilgili bir kuraldır. Kural şudur: Class 'ın sadece bir kere instance'ı yaratılabilmesine izin vermek. Bunu da if else kontrolüyle yapabiliriz.

Mesela bir bağlantı nesnesini her defasında proje içerisinde new komutu ile yaratmak gereksiz hafıza işgali yapar. Bu yüzden her hangi bir class'ı Singleton Pattern ile oluşturmak istiyorsak şuna benzer bir kontrol oluşturmalıyız:

 if (!isset($nesne))
   return $nesne= new class_ismi();
 else
   return $nesne;	
 
Bu kontrolü yazacağımız class içerisinde singleton fonksiyonuna yerleştirip __construct() motudunu ise boş bıraktığımızda classımızı singleton pattern ile tasarım yapmış oluyoruz.

Bununla ilgili bir örnek yapalım:
  class myclass
  
  {
   // classın dışardan erişimini private ile kısıtlıyoruz.
   private static $instance;
   // Singleton Pattern'da classlar static değişken içerisinde barındırılır.

   // Private kullanarak new komutunu ile classı yaratmayı engelliyoruz.
   private function __construct()
   {
   }   
  // new myclass yerine kullancağımız singleton fonksiyonu 
  public static function singleton ()

  {
  if (!isset($instance))
   return self::$instance=new myclass;
 else
   return self::$instance;	

 }
 
 // örnek bir dışarden erişimi olan fonksiyon.
  public function getdata()
  
  {
   return "some data...";
  }
  
  }
// classı new komutu ile yaratamadığımız için singleton fonksiyonunu kullanıyoruz.
  $class =& myclass::singleton();
  // aşağıdaki komut some data yazdırır.
  echo $class->getdata();
  
Singleton Pattern yüzde yüz nesne tabanlı projeler yaparken daha elverişli oluyor. Buna en güzel örnek MVC'dir. MVC zaten mantık olarak Model nesnesi oluşturmamızı gerektirdiği için Singletton Pattern Tasarım Şablonu kullanmak şart oluyor.

Not: Eğer var olan classları singleton pattern ile yaratmak istiyorsak en baştaki if else kontrolünü kullanabiliriz.

Yararlandığım kaynak : Uzmanlar için PHP (Mehmet Şamlı)
yazan Zülküf Küçüközer tarih   30th August 2009
primary key words  Tasarım şablonu | Singleton patten | Php | Class okunma  8340
secondary key words  Tasarım
writing Mustafa Tuzcu writing 28th November 2011
merhaba hocam, öncelikle ders çok yararlı oldu teşekkürler, fakat bu " =& " referans gösterme olayını ben pek anlamıyorum bi açıklama getirirseniz sevinirim.
writing Zülküf Küçüközer writing 10th May 2013
Merhaba, " =& " ile objenin kopyası yerine referansını alırız. " =& " olmasaydı da aynı aynı şey olurdu ama bu sayede sadece memory'de boşuna yer tutmamış oluyoruz.