Singleton

Z PHPEdia.pl
Skocz do: nawigacji, wyszukiwania

Charakterystyka

Wzorzec projektowy (ang. design pattern), zaliczany do kategorii wzorców konstrukcyjnych, pozwalający na kontrolowanie ilości instancji danej klasy używanych w systemie, a także sposób ich uzyskiwania. W najczęstszym przypadku singleton zwraca zawsze jedną instancję klasy.

Założenia

Singleton pozwala na:

  • kontrolowanie ilości występujących klas w systemie (najczęściej do jednej kopii)
  • kontrolowanie sposobu uzyskiwania instancji obiektu (przez statyczną metodą)
  • globalne uzyskiwanie instancji obiektu (z każdego miejsca skryptu)

Kiedy używać?

Wzorca singleton możemy używać wtedy, gdy potrzebujemny tylko jednej instancji danej klasy ( np w klasie do obsługi bazy danych, gdzie przy każdym stworzeniu obiektu, tworzone jest nowe połączenie), i/lub gdy potrzebujemy globalnego dostępu do instancji klasy.

przykładowe implementacje

Implementacja dla PHP 5

<?php
 
final class Singleton
{
    /**
     * Przechowuje instancję klasy Singleton
     *
     * @var object
     * @access private
     */
    private static $oInstance = false;
 
    /**
     * Zwraca instancję obiektu Singleton
     *
     * @return Singleton
     * @access public
     * @static
     */
    public static function getInstance()
    {
        if( self::$oInstance == false )
        {
            self::$oInstance = new Singleton();
        }
        return self::$oInstance;
    }
 
    private function __construct() {}
}
?>

Implementacja dla PHP 4

<?php
 
class Singleton
{
    /**
     * Zwraca instancję obiektu Singleton
     *
     * @return Singleton
     * @access public
     * @static
     */
    function &getInstance()
    {
        static $oInstance = false;
        if( $oInstance == false )
        {
            $oInstance = new Singleton();
        }
        return $oInstance;
    }
}
?>

Aby otrzymać instancję, należy wywołać statyczną metodą getInstance():

<?php $oSingleton = Singleton::getInstance(); ?>


Implementacja dla PHP 4 nie speśnia wszystkich zaśożeś tego wzorca. W dalszym ciągu możemy utworzyć instancję obiektu za pomocą kodu:

<?php $obj = new Singleton() ?>

W PHP 5 nie pozwala na to prywatny konstruktor. W PHP 4 to, czy wzorzec będzie działań poprawnie, zależy tylko od konsekwencji programisty.

Polecamy również

Strona ta opisuje jeden z Wzorców projektowych.

Wzorce projektowe: Definicja | Zalety | Podział wzorców | Lista wzorców