16.08 2010

Singleton

Перед прочтением ознакомьтесь с введением в паттерны проектирования на PHP, в котором описаны принятые соглашения и понятия. Данная статья дополняется с некоторой периодичностью, так что если вы ее читали ранее, не факт что данные не изменились.

Singleton (Синглтон, одиночка) относиться к классу порождающих паттернов. Он используется для создания всего одного экземпляра класса, и гарантирует, что во время работы программы не появиться второй. Например в схеме MVC, зачастую этот паттерн используется для порождения главного контроллера (фронтового)

Суть паттерна

UML

Пример

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

Скачать пример можно тут

При первом обращение к функции getInstance будет создан объект, который, впоследствии, будет всем отдаваться. Так как создание другими средствами не представляется возможным, это гарантирует присутствие всего одного экземпляра класса.

В заключение

comments powered by Disqus