Inicio | Pedro Santana |  RSS  Mi tumblelog  Mis photos  Mi CV

 

Patrón Singleton parte II

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

  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

  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

  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 :)

8 comentarios en “Patrón Singleton parte II”

 

asdasdasd

Ahh pero que pasa cuando yo no se usar PHP5?? No seria mas divertido en .NET??

Jesús

¿ No sería mejor hacerlo mediante una interfaz. Pues haciendolo con herencia, si necesitases crear una clase derivada estás vendido, no ?

pecesama

asdasdasd Los patrones de diseño son divertidos en cualquier lenguaje. Si no sabes usar PHP5 es buen momento para aprender.

Jesús no se que signifique estar vendido en este contexto, pero no puede usar una interface para esto debido a que debes poner código en el método getInstance.

Marcelo J. Maza

La verdad es que esta muy interesante el tema.
Te comento que aun no me llevo muy bien con clases en php, pero lo que estoy necesitando, es generar una instancia de la clase PDO de PHP5 (para conectar a Mysql, ejecutar consultas, etc) y que la instancia de la misma, pueda ser utilizada en todas las clases que necesite (por ej: clase productos, usuarios, etc); esto es para no tener que instanciar/destruir objetos de la clase de datos dentro de cada una de estas clases ó recurrir a pasar el objeto como parámetro.
Hago incapié en el hecho de NO tener que instanciar o pasar como parametro el objeto de la clase de datos (PDO). De ser posible cualquier aporte o sugerencia, estoy a la espera.

Desde ya muchisimas gracias por tu tiempo.

Marcelo

Leo

que pasa si dos hilos de ejecución intentan crear la instancia al mismo tiempo.

 

Deja un comentario