Merhaba Arkadaşlar,
Bu makalemde Creational desenlerden olan Singleton Pattern’ı inceleyeceğiz. Design Pattern’lar arasında en kolayı diyebiliriz.
Kısaca Tasarım Desenleri; Dünyanın farklı yerlerinde programcılar tarafından belirli bir soruna çözüm getirmek amacı ile oluşturulmuş yazılım kalıplarıdır. Dil bağımsızdır. Her hangi bir dilde yazılmış Design Pattern örneğini siz kendi kullandığınız dildede uygulayabilirsiniz.
Singleton Pattern ise object’mizin runtime da tekil olmasını sağlamaktadır. Bu da object’nin bir kere oluşturulup, istediğimiz kadar kullanmamızı sağlıyor. Böylece hem hız kazanıyoruz hem de memory alanından tasarruf etmiş oluyoruz. Data Access Layer’da uygulanabilir bir pattern’dır. Hemen bir örnek ile açıklayalım.
<?php
namespace Patterns{
final class SingletonPattern{
private static $object;
private function __construct(){
}
public static function getObject(){
if(!isset(self::$object)){
$cls = __CLASS__;
self::$object = new $cls;
print("Oluşturdum!<br/>");
}
print("Zaten Vardım!<br/>");
return self::$object;
}
}
}
namespace {
$class =& \Patterns\SingletonPattern::getObject();
$class1 =& \Patterns\SingletonPattern::getObject();
$class2 =& \Patterns\SingletonPattern::getObject();
$class3 =& \Patterns\SingletonPattern::getObject();
$class4 =& \Patterns\SingletonPattern::getObject();
//$class = new \Patterns\SingletonPattern();
}
?>
Ben bir metoda bağlayarak çağırdım siz public static bir instance yaratıp bunun üzerindende nesneyi temsil edebilirsiniz. Nesnemiz new ile yaratılmasını önlemek içinde nesnenin construction(yapıcı metod)’nı private olarak değiştirdik. Böylece eğer yorum satırına aldığım kodu çalıştırmayı denerse biri FATAL ERROR dönecektir.
Kod çalıştığında 1 kez “Oluşturdum!” ve 4 kez “Zaten Vardım!” yazması gerekiyor. Buradanda şunu anlıyoruz 1 kere nesne oluşturulmuş ve diğer 4 nesne oluşturma girişimlerinde daha önceden oluşturulup RAM’e yüklenmiş olan object bize verildi.
Konu hakkında biraz daha bilgi isterseniz http://phpnedir.net/Page_singletonPattern.do buradaki kısa yazımı okuyabilirsiniz.
İyi Çalışmalar.