Continuamos con la serie de patrones, en esta ocasión vamos a extender la funcionalidad del patrón Singleton para que sea más simple su utilización en nuestros sistemas PHP5.

En el post anterior vimos como implementar el patrón Singleton en nuestras clases. Pero cuando tenemos nuestro sistema con muchas clases que requieren hacer uso de este patrón se vuelve complejo y a la vez más lento el implementar clase por clase todo el código que necesita el patrón para funcionar.

Vamos a mejorar eso utilizando una de las características más importantes de la POO: la herencia.

Paso número 1: Debemos definir la clase base (clase padre); es decir la clase Singleton:

singleton.class.php

PHP:
  1. < ?php
  2. class singleton {
  3.         private static $instances = array();
  4.  
  5.         public static function getInstance($class) {
  6.                 if (!isset(self::$instances[$class])) {
  7.                         self::$instances[$class] = new $class();
  8.                 }
  9.                 return self::$instances[$class];
  10.         }
  11.  
  12.         private final function __clone() { }
  13. }
  14. ?>

Paso número 2: Crear las clases que vayamos a necesitar extendiendo (heredando) de la clase Singleton.

ejemplo.class.php

PHP:
  1. < ?php
  2. class ejemplo extends singleton {
  3.         public static function getInstance() {
  4.                 return parent::getInstance(get_class());
  5.         }
  6.  
  7.         public function accion() {
  8.                 echo "Objeto unico";
  9.         }
  10. }
  11. ?>

Paso número 3: Ahora veamos como utilizarlo.

index.php

PHP:
  1. < ?php
  2. include("singleton.class.php");
  3. include("ejemplo.class.php");
  4.  
  5. $prueba = ejemplo::getInstance();
  6. $prueba->accion();
  7. ?>

De esta forma basta con heredar la clase Singleton en cada una de las clases donde la necesitemos y con hacer polimorfismo del método getInstance() tenemos un Singleton en nuestras clases.

Nos leemos en la siguiente entrega :)