Para que sirve el patron Singleton?
Etiquetas: ADO.NET, SQL Server 2008, Visual Basic 10, Visual Studio 2008, Visual Studio 2010
Antes de contestar la pregunta “¿Para que sirve el patrón Singleton?”; contestemos esta: ¿Qué es el patrónSingleton? , según Wikipedia:

Para el FormMDI, tengo el siguiente diseño:

El patrón de diseño Singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella. (http://es.wikipedia.org/wiki/Singleton) En el articulo escrito por León Weliki para MSDN, profundiza sobre el tema en cuestión (http://msdn.microsoft.com/es-es/library/bb972272.aspx).
Resumiendo las definiciones, el patrón Singleton me asegura que solo se creará una única instancia de la clase. Contestando a la segunda pregunta, para que me sirve?. Empecemos a definir un contexto donde pueda aplicar este patrón; normalmente las tablas de clientes y proveedores tienen un campo Distrito, que es el lugar donde se encuentra ubica la empresa. Es muy probable que en cada mantenimiento hagamos uso de la instancia de la clase Distrito con la finalidad de obtener los datos, entonces la conexión a la base de datos se hará varias veces cargando los mismos datos, pero en diferentes formularios, aquí podemos centralizar la carga de los datos por única vez, y que luego pueda ser usada en diferentes partes de la aplicación.
Se crea la clase Distrito que implemente el patrón Singleton:1: Imports System.Data.SqlClient
2:
3: Public Class Distrito
4: Private Shared Instancia As Distrito = Nothing
5: Private dt As New DataTable
6:
7: 'Se inicia el constructor por unica vez
8: Private Sub New()
9: Dim cnx As New SqlConnection("Server=.\SQL2008;Database=VentasDemo;Integrated Security=SSPI;")
10: Dim cmd As New SqlCommand("Select Cod_Dis, Nom_Dis From TB_Distrito Order By Nom_Dis", cnx)
11:
12: cnx.Open()
13: dt.Load(cmd.ExecuteReader)
14: cnx.Close()
15: End Sub
16: Public Shared Function getInstancia() As Distrito
17: If Instancia Is Nothing Then
18: Instancia = New Distrito()
19: End If
20: Return Instancia
21: End Function
22: Public Function GetDistritos() As DataTable
23: Return dt
24: End Function
25: End Class
El método getInstancia asegura que la clase tenga una única instancia, por lo tanto el constructor se ejecuta una sola vez, es aquí donde colocare el código que carga los distritos de la base de datos, y los almacenare en un objeto DataTable. Observe que por una sola vez se conectara a la base de datos para obtener los datos de distritos, para luego usarlo en toda la aplicación. El objeto Instancia me indicara si se creo la instancia de Distrito, caso contrario es nulo. El método GetDistritos devuelve el objeto DataTable, con los datos cargados.
Para probar la clase Distrito, creare tres formularios: FormMDI, que será mi formulario principal, Form1 que será el mantenimiento de Clientes y el Form2 será el mantenimiento de Proveedores. En cada formulario creare el objeto Distrito, pero solo en uno de ellos se crea la instancia.
Para el FormMDI, tengo el siguiente diseño:
ok
ResponderEliminarParece interezante el patron de singleton, le pediria si pudiera subir articulos en base seguridad web.
ResponderEliminarSaludos, agregate en mi blog como seguidor... no te olvides...
ResponderEliminarvisita mi blog y comentalo...
http://davidfloreszafra.blogspot.com/