Blog de Gonzalo

SINGLETON

Singleton es un patrón de diseño, que tiene como propósito asegurar que solo se pueda crear una instancia de la clase y proporcionar un punto global de acceso a ella, eso significa que no se hará un uso innecesario de recursos ya que no se crearan nuevos objetos cada vez que se necesite.
La idea es que la clase tenga un constructor privado para que no pueda ser accedido desde fuera de la clase y que aunque haya clases hijas estas no puedan instanciar objetos. También debe tener una propiedad estática privada donde se almacene la instancia y un método estático que sea el punto de acceso global a la misma, devolviéndola cuando se lo llama.
Con el siguiente ejemplo se ve bastante claro:


class Database {
static private $instance = null;
//El constructor tiene que ser privado private function __contruct() {}
// Evita que el objeto se pueda clonar
public function __clone()
{
trigger_error(‘La clonación de este objeto no está permitida’,
E_USER_ERROR); }
public static function getInstance() {
if (self::$instance == null) {
echo 'Se instancia el objeto ya que no está instanciado';
$className = __CLASS__;
self::$instance = new $className;
}
return self::$instance;
}
public function connect()
{
echo 'Conexión a BBDD';
}
}
echo 'Se instancia el objeto';
$db = Database::getInstance();
$db->connect();
echo 'Ya esyá instanciado así que no se instancia el objeto otra vez';
$db2 = Database::getInstance();
$db2->connect();

Como se ve ya no se crea un objeto de con el tipico constructor new CBaseDatos() sino que lo hacemos utilizando el metodo estatico publico que nos devuelve un objeto de este tipo.
Si bien cada modelo cuando es construido tiene su atributo propio $instance este apunta a la única instancia de conexión.
El ejemplo es muy sencillo pero se entiende muy bien.

Compartir en twitter