Singleton (Синглтон, одиночка) относиться к классу порождающих паттернов. Он используется для создания всего одного экземпляра класса, и гарантирует, что во время работы программы не появиться второй. Например в схеме MVC, зачастую этот паттерн используется для порождения главного контроллера (фронтового)
Суть паттерна
Пример
[php]
class Singleton
{
private static
$instance = null;
/**
* @return Singleton
*/
public static function getInstance()
{
if (null === self::$instance)
{
self::$instance = new self();
}
return self::$instance;
}
private function __clone() {}
private function __construct() {}
public function test()
{
var_dump($this);
}
}
$Object = Singleton::getInstance(); // Получение объекта
//Вывод будет одинаковым, так как существует только один экземпляр
$Object -> test();
Singleton::getInstance() -> test();
// Попытка создать дополнительный экземпляр приведет к ошибке
$Object2 = new Singleton(); // Fatal error: Call to private Singleton::__construct() from invalid context
$Object3 = clone $Object; // Fatal error: Call to private Singleton::__clone() from context ”
[/php]
При первом обращение к функции getInstance будет создан объект, который, впоследствии, будет всем отдаваться. Так как создание другими средствами не представляется возможным, это гарантирует присутствие всего одного экземпляра класса.
В заключение
- Метод getInstance фактически является фабричным методом
- Начиная с PHP 5.3.0 была добавлена возможность Late Static Bindings, благодаря который этот паттерн можно реализовать в виде абстрактного класса.