Vous êtes sur la page 1sur 13

UNIVERSIDAD LAICA ELOY ALFARO DE MANAB

FACULTAD DE CIENCIAS INFORMTICAS





ASIGNATURA:
HERRAMIENTAS CASE
NOMBRE:
BELLO FLORES RAMN DAVID

CURSO:
7 NIVEL B

PROFESOR:
ING. FREDDY ALARCON

MANTA-MANAB-ECUADOR

Tabla de Contenido
Tema: ........................................................................................................................................................... 3
Glosario: ..................................................................................................................................................... 3
Acoplamiento: ....................................................................................................................................... 3
Antipatrn: . ........................................................................................................................................... 3
Singleton:. .............................................................................................................................................. 3
Introduccin .............................................................................................................................................. 3
Contenido ................................................................................................................................................... 4
Estructura .................................................................................................................................................. 5
Ejemplo: ...................................................................................................................................................... 6
Conclusin. .............................................................................................................................................. 12
Recomendaciones ................................................................................................................................. 12
Bibliografa............................................................................................................................................... 13




















Tema:

PATRN DE DISEO SINGLETON

Glosario:

Acoplamiento: junto con la modularidad, la cohesin y otros factores, permiten mejorar la
programacin y el diseo de sistemas informticos y aplicaciones, y son muy importantes en el
incremento de la reutilizacin de los cdigos.ios

Antipatrn: de diseo es un patrn de diseo que invariablemente conduce a una mala
solucin para un problema.

Singleton: es un patrn que garantiza que una clase slo tenga una instancia y proporciona un
punto de acceso global a sta instancia.

Introduccin

Cuando se habla de un patrn de diseo se refiere a una solucin de un problema concreto en
el desarrollo de software. Pero no cualquier solucin, slo aquellas que se ha demostrado
que son eficientes en diferentes escenarios y reutilizables en gran cantidad de contextos de
aplicaciones.

Los patrones de diseos no fueron inventados fueron descubierto.

En este caso se trtara el patrn de diseo Singleton el cual garantiza que una clase slo
tenga una instancia y proporciona un punto de acceso global a sta instancia.


Contenido

Patrn de diseo: Singleton
El patrn Singleton garantiza que una clase slo tenga una instancia y proporciona un punto de
acceso global a sta instancia.
El patrn Singleton asegura que exista una nica instancia de una clase. A primera vista, uno
puede pensar que pueden utilizarse clases con miembros estticos para el mismo fin.
Sin embargo, los resultados no son los mismos, ya que en este caso la responsabilidad de
tener una nica instancia recae en el cliente de la clase. El patrn Singleton hace que la clase
sea responsable de su nica instancia, quitando as este problema a los clientes.
Adicionalmente, si todos los mtodos de esta clase son estticos, stos no pueden ser
extendidos, desaprovechando as las capacidades polimrficas que nos proveen los entornos
orientados a objetos.

El funcionamiento de este patrn es muy sencillo y podra reducirse a los siguientes conceptos:

1. Ocultar el constructor de la clase Singleton, para que los clientes no puedan crear
instancias.

2. Declarar en la clase Singleton una variable miembro privada que contenga la referencia
a la instancia nica que queremos gestionar.

3. Proveer en la clase Singleton una funcin o propiedad que brinde acceso a la nica
instancia gestionada por el Singleton. Los clientes acceden a la instancia a travs de
esta funcin o propiedad.

Estas reglas se cumplen en todas las implementaciones del Singleton, independientemente de
los recaudos que deban tomarse para soportar la correcta ejecucin en entornos multihilo.
( http://msdn.microsoft.com, s.f.)








Estructura












Ejemplo:
Teniendo en cuenta estas caractersticas vamos a desarrollar una clase singleton:



En esta pequea porcin de cdigo hemos conseguido realizar una nica instancia en el momento en el
que se llama por primera vez. Adems hemos creado un constructor con acceso privado para que nadie
pueda instanciar la clase. Y para terminar hemos creado una propiedad de solo lectura con la que se
puede acceder a la instancia creada. Pero sta no ser Thread-safe. Para conseguirlo podramos
modificar la clase de la siguiente forma:


Al crear el atributo que almacena la instancia como readonly, y al ser esttica, se instanciar al arrancar
la aplicacin. As conseguiremos que sea una clase thread-safe. Es decir, que no habr problemas si
varios procesos acceden a esta clase al mismo tiempo. No obstante, si quisiramos respetar que solo se
instanciara el objeto bajo demanda, deberamos usar bloqueos:

Gracias al bloqueo ya podremos ejecutar nuestra clase singleton en un contexto multihilo,
instancindola slo cuando se ha solicitado la primera vez. A este efecto de carga en diferido se le
denomina en ingls Lazy Loading. Y desde la versin 4.0 de la framework .net se nos provee un objeto
que nos ayuda a realizarla: Lazy. Por lo que podramos simplificar nuestro ejemplo usndolo:




El objeto Lazy ya es de por si thread-safe y en su declaracin simplemente debemos indicarle de qu
forma se debe instanciar el objeto que contiene. Por esta razn es posiblemente la mejor
implementacin del patrn singleton.
Si por ejemplo estuvieramos desarrollando la herramientas de log de nuestra aplicacin, bastara con
que aadieramos las funciones necesarias para escribir en el log a nuestra clase singleton:


Viendo este cdigo en nuestra aplicacin, est claro que para poder escribir en el log desde cualquier
punto de la misma slo tendremos que hacer esta llamada:



Al pararnos a pensar las consecuencias de escribir este cdigo, caeremos en la cuenta de que singleton
nos est creando una dependencia en todo el programa donde queramos tener informacin del proceso
en forma de logs (eso es a lo largo de toda la aplicacin). Algo que comunmente conocemos
como acoplamiento entre clases.

El acoplamiento puede dar varios problemas a lo largo del ciclo de vida de un software. Como por
ejemplo a la hora de realizar pruebas unitarias. Pero no es objeto de este artculo centrarse en este
problema. Aunque si lo es proponer soluciones de implementacin del patrn singleton que se adapten
a un desarrollo slido.

Si quisieramos evitar este acoplamiento, es recomendable usar un IoC Container (Inversion Of Control
Container) para respetar la D de los pincipios SOLID: Dependency Inversion Principle. Esta, por as
llamarla, norma nos dice que debemos depender de las abstraciones (las interfaces, los contratos) no
de las concreciones (clases que implementan esas interfaces).

En las frameworks de inversin de control ms conocidas se han implementado mecanismos que nos
permiten crear objetos singleton desde el propio contenedor. Esto quiere decir que simplemente
tendramos que crear una interfaz y una implementacin de la misma, sin preocuparnos de como se
instancia. Visto en forma de cdigo sera esto:



De esta forma, delegaramos la gestin del ciclo de vida de las instancias al IoC Container que hayamos
decidido. A continuacin mostraremos cmo podemos configurar una instancia singleton usando las
frameworks de inyeccin de dependencias (DI) ms conocidas:



Pero esto no quiere decir que no nos sirva la implementacin de singleton que hicimos anteriormente,
ya que es posible que no nos fiemos o que nuestro contenedor no tenga ningn artefacto que nos
facilite la implementacin singleton. Para estos casos, podramos hacer que un contenedor como Unity
nos devolviera la instancia singleton que gestiona nuestra clase usando la propiedad esttica.
Simplemente tendramos que seguir usando una interface, implementarla en nuestra clase singleton y
registrar una instancia en lugar de una clase en el contenedor:

De esta forma, por ejemplo, si usamos el contenedor de Unity, tendramos que registrar su valor as:

Con este cdigo sera nuestro singleton Logger quien gestione el ciclo de vida y conseguiramos
desacoplarnos de la implementacin gracias al IoC.

Podramos hacer lo mismo con Structure maps:


Y para finalizar, con Ninject:

A lo largo de este artculo hemos visto diferentes formas de implementar el patrn singleton. Un patrn
de desarrollo sigue siendo vigente y vlido. Lo nico que tenemos que tener en cuenta, es evitar
aplicarlo donde no corresponde o de una forma incorrecta. Algo que conocemos como el antipatrn
singletonitis. (programandonet, s.f.)













Conclusin.

Singleton es uno de los patrones ms fciles de entender y manipular lo nico que tenemos
que tener en cuenta, es evitar aplicarlo donde no corresponde o de una forma incorrecta. Algo
que conocemos como el antipatrn singletonitis
Recomendaciones

Estimado lector al culminar con este trabajo puedo recomendar que:
Cuando se utilizan patrones de diseo para la resolucin de problemas o para la creacin de un
software los resultados que se obtienen son extremadamente favorables ya que son soluciones
que han sido probadas por en muchas situaciones similares.
Es necesario tener el conocimiento sobre los diversos patrones de diseo que existen para
seleccionar el ms adecuado a la hora de dar soluciones a problemas.


















Bibliografa
http://msdn.microsoft.com. (s.f.). Obtenido de http://msdn.microsoft.com:
http://msdn.microsoft.com/es-es/library/bb972272.aspx#m21
programandonet. (s.f.). http://programandonet.com. Obtenido de http://programandonet.com:
http://programandonet.com/web/patrones-diseno-singleton/

Vous aimerez peut-être aussi