El patrón Singleton
Un patrón describe un problema que ocurre frecuentemente en el diseño e implementación del Software y ofrece una solución consistente que puede ser reusada.
Existe un gran número de patrones de diseños agrupados fundamentalmente en tres tipos o categorías: patrones de comportamiento, patrones estructurales y patrones de creación dentro de los cuales se encuentra el patrón Singleton.
El patrón Singleton garantiza que solo haya una única instancia de una clase, accesible desde cualquier punto de la aplicación.
Existen muchos casos donde se requiere usar el patrón anteriormente mencionado por ejemplo: en un sistemas de impresión (una sola cola de impresión), sistemas que acceden a bases de datos ( una sola conexión), sistemas que guardan configuraciones globables, otros.
A continuación se muestra como implemetar este patrón en Java y en PHP.
[Java]
package example.singleton; public class MySqlConnection { private static MySqlConnection instance = null; private MySqlConnection() { System.out.println("Se ha creado una instancia de la clase MySqlConnection"); } public static MySqlConnection getInstance() { if (null == instance) { instance = new MySqlConnection(); } return instance; } } package example.test; import example.singleton.MySqlConnection; public class TestSingleton { public static void main(String[] str) { MySqlConnection conn1 = MySqlConnection.getInstance(); MySqlConnection conn2 = MySqlConnection.getInstance(); } }
Al ejecutar main de la clase TestSingleton se mostrará el siguiente mensaje:
Se ha creado una instancia de la clase MySqlConnection
La segunda vez que se llama a la función MySqlConnection.getInstance() no entra al if y por tanto no se llamará al constructor.
Nótese que el constructor de la clase es privado, lo que impide que la clase sea instanciada fuera de la misma, la presencia de la variable instance la cual es privada y estática y de la función getInstance() la cual es pública y estática.
Este ejemplo no tiene en cuenta como manejar las colisiones en aplicaciones multihilos.
[php]
<?php class MySqlConnection { static private $instace = NULL; private function __construct() { echo "Se ha creado una instancia de la clase MySqlConnection"; } private function __clone() { } public static function getInstance() { if (NULL == self::$instace) { self::$instace = new MySqlConnection(); } return new MySqlConnection(); } } ?>
Nótese que además del constructor el método clone es privado lo que asegura que no exista más de una instacia de la clase MySqlConnection.
En ambos casos se ha omitido la lógica de la conexión.
Desventajas
Es engorroso implementar la herencia en un Singleton , ya que solo funcionará si la clase base aún no ha sido instanciada.
Conclusiones
El diseño de patrones se incluyen dentro de las mejores prácticas de la Ingeniería del Software debido a que ofrece numerosas ventajas como:
- Consistencia y calidad en el código fuente.
- Reusabilidad del código fuente.
- Mejor rendimiento de las aplicaciones.
- Aplicaciones más fáciles de mantener.
Bibliografía
- Hayder Hasin. Object Oriented Programming with PHP5.
- Gutmans Andi, Sæther Bakken Stig, Rethans Derick. PHP 5 Power Programming.
- W. Cooper James. The Design Patterns.




3 comentarios
Deje su comentario