Patrones de diseño: patrón Singleton

In: patrones de diseño

12 ago 2010

corona 194x150 Patrones de diseño: patrón SingletonEl patrón Singleton es quizás el patrón más conocido, y a la vez el más senzillo de diseñar (en mi opinión). Todo y eso, el concepto y la funcionalidad es a veces un poco complicada de entender. Esta clasificado como un patrón creacional, y es patrón que se implementa en otro patrones.

Antes de explicarlos, hay que refrescar un poco los conceptos de programación orientada a objetos, los necesario para explicar el partón :

  • Existen clases y objetos, y no son lo mismo. Un objeto es la instancia de una clase.
  • Los atributos y métodos NO estáticos de una clase, son de los objetos.
  • Los atributos y métodos estáticos de una clase, son de la clase.
  • La llamada al constructor de la clase, devuelve un objeto.

El contexto de este patrón es cuando se diseña una aplicación donde tenemos una clase, de la cual sólo puede existir una instancia.

El problema esta en controlar este aspecto, ya que por defecto, la programación orientada objetos da libertad para instanciar tantos objetos de una clase como se desee.

La solución que se aplicaría usando el patrón Singleton, trata de realizar unas modificaciones en la clase para bloquear el método contructor para que no se pueden hacer indefinidos objetos, y también crear un método alternativo para conseguir la instancia única que se desea. Detallando en forma de lista las modificaciones que hay que hacer en una clase para aplicar el patrón Singleton, quería así:

  • Convertir en privado el método constructor.
  • Crear un atributo, privado y estático, que almacenará la única instancia.
  • Crear un método, público y estático, que devolverá la única instancia. Su función será:
    • La primera vez que se llame a este método, creará una instancia, la almacenará en el atributo estático, y la devolverá.
    • Las siguiente veces que se llame, devolverá la instancia almacenada.

El esquema UML sería el siguiente (Los elementos subrallados son elementos estáticos):

patron singleton UML Patrones de diseño: patrón Singleton

El código de una clase singleton en PHP5, sería así:

<?php
class Ejemplo
{
    // Contenedor Instancia de la Clase
    private static $_instance;
 
    // Constructor privado; previene creacion de objetos via new
    private function __construct()
    {
        echo 'Soy el constructor';
    }
 
    // EL metodo singleton
    public static function getInstance()
    {
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$_instance = new $c;
        }
 
        return self::$_instance;
    }
 
    // Clone no permitido
    public function __clone()
    {
        trigger_error('Clone no se permite.', E_USER_ERROR);
    }
 
}
 
?>

Ejemplos del uso del Patrón Singleton, o ejemplos de cuando es necesario tener una clase que solamente se puede instanciar una vez: la ventana de una aplicación, la conexión a la base de datos, el sistema de logs, o de caches, …

Entradas relacionadas:

  1. Patrones de diseño: patrón Observador
  2. Patrones de diseño: introducción
  3. Patrones de diseño: cheat sheet
  4. Autocompletado en Netbeans y Eclipse
  5. Principios de programación para Unit-Testing

4 Comentarios en Patrones de diseño: patrón Singleton

carlos

19 noviembre 2010 a las 09:23

Excelente doctor!!!!!!!!!!!

Función de autocompletado en Netbeans y Eclipse | Otro Blog Más

23 marzo 2011 a las 08:17

[...] En la programación orientada a objetos (POO), la función de autocompletado ayuda a encontrar propiedades o funciones de clases desarrolladas. Pero si el objeto no es creado a traves del operador new, el IDE no sabrá de que clase es el objeto, y no podrá ofrecer las sugerencias correctamente. Es el típico caso de los patrones de diseño de Factory, incluso dependiendo del caso podría ocurrir con el patrón Singleton. [...]

Ronnie

03 mayo 2011 a las 07:48

Grandioso post, la verdad me quedo mas claro el significado y el uso de la palabra reservada “static”.

+ 10 (y).

Principios de programación para Unit-Testing | Otro Blog Más

09 mayo 2011 a las 08:12

[...] del patrón Singleton, que conlleva el uso de los 4 puntos [...]

Formulario de Comentario

Página 1 de 11