Patrón de Diseño “Singleton” implementación PHP
El Patrón “Singleton” sirve para restringir la creación de instancias de un objeto, obligando que sólo se pueda crear una única instancia
![]()
Análisis del Patrón
- El constructor de la clase debe ser privado (private). No puede ser público (public), y tampoco podrÃa ser protegida (protected) porque sus hijos(subclases),en caso de herencia, podrÃan crear múltiples instancias.
- Para almacenar nuestra instancia debemos crear una propiedad estática privada.No puede ser protegida, ni pública.
- Hacemos un método de clase (método estático) para crear el punto global de acceso a nuestra única instancia. Este método debe retornar la instancia única.
Implementación:
<?php
class Singleton {
private static $instancia;
private $cont;
private function __construct() {
echo "Se ha creado una Instancia para la clase: " . __CLASS__ . "<br />";
$this->cont = 0;
}
public static function getInstance() {
if (! self::$instancia instanceof self) {
self::$instancia = new self ( );
} else {
echo "Existe una Instancia creada para " . __CLASS__ . "<br />";
}
return self::$instancia;
}
public function incrementar() {
return ++ $this->cont;
}
public function disminuir() {
return -- $this->cont;
}
public function getCont() {
return $this->cont;
}
}
?>
Prueba del Patrón:
<?php include 'Singleton.php'; //Creamos una Instancia, en caso que NO exista se crea. $instancia = Singleton::getInstance (); echo "Objeto: instancia (método incrementar): " . $instancia->incrementar () . "<br />"; echo "Objeto: instancia (método incrementar): " . $instancia->incrementar () . "<br />"; echo "Objeto: instancia (método incrementar): " . $instancia->incrementar () . "<br /><br />"; //Creamos una Instancia, en caso que exista retorna la referencia del objeto creado. $otraInstancia = Singleton::getInstance (); echo "Objeto: otraInstancia (método disminuir): " . $otraInstancia->disminuir () . "<br />"; echo "Objeto: otraInstancia (método incrementar): " . $otraInstancia->incrementar () . "<br /><br />"; //pedimos el valor del contador por medio de ambas instancias. echo "Objeto: instancia (método getCont): " . $instancia->getCont () . "<br />"; echo "Objeto: otraInstancia (método getCont): " . $otraInstancia->getCont () . "<br />"; ?>
Salida en el navegador:
Se ha creado una Instancia para la clase: Singleton Objeto: instancia (método incrementar): 1 Objeto: instancia (método incrementar): 2 Objeto: instancia (método incrementar): 3 Existe una Instancia creada para Singleton Objeto: otraInstancia (método disminuir): 2 Objeto: otraInstancia (método incrementar): 3 Objeto: instancia (método getCont): 3 Objeto: otraInstancia (método getCont): 3
Link de interés:
saludos
promero
¿Disfrutaste esta entrada? Por qué no dejas un comentario abajo y continúas la conversación, o te suscrÃbes a mi feed y obtienes los artÃculos como este enviados automáticamente cada dÃa hacia tu lector de feeds.



No hay comentarios todavÃa.
Deja un comentario
Saltos de lÃnea automáticos, la dirección de email nunca será publicada, HTML permitido:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>