Etiqueta: Singleton
Patrones de diseño Singular (Singleton) y Decorador (Abstract o Decorator) en .NET
por José Jorge Márquez Gómez a nov.24, 2009, bajo General, Medio
Bueno, después de mi letargo (siento mucho no postear antes, pero la universidad me tenia tiene agobiado), voy a hablar de algunos patrones de diseño sobre .NET.
Pero antes un poco de “historia”:
Los patrones de diseño sirven para varias cosas, (extraído de wikipedia):
* Proporcionar catálogos de elementos reusables en el diseño de sistemas software.
* Evitar la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriormente.
* Formalizar un vocabulario común entre diseñadores.
* Estandarizar el modo en que se realiza el diseño.
* Facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento ya existente.
Y como bien dicen en wikipedia no pretenden imponer nada y abusar de los mismos puede ser un error.
Bien veamos algunos patrones en .NET.
Patron Singular (Singleton):
Este patrón nos asegura que solo haya una instancia por clase evitando así consumos excesivos de recursos o accesos inconsistentes. Sus usos pueden ser varios, entre ellos el acceso a configuraciones globales, de logging, etc..
El esquema general sería:
Public Class PatronSingular Private Shared instanciaUnica As PatronSingular Private Sub New() 'constructor privado para generar la instancia la propia clase End Sub Public Shared Function getInstance() As PatronSingular 'controlamos la creacion de objetos desde la propia clase. If instanciaUnica Is Nothing Then instanciaUnica = New PatronSingular() End If Return instanciaUnica End Function End Class
Un patrón Singleton su constructor debe ser privado para que sea la clase la controle su propia creación y sea responsable de la misma. Debemos crear un método, que normalmente se llama “getInstance()” que nos devuelve dicha instancia de clase para su uso.
Patrón decorador (Decorator):
Nos hace de “envoltura” de objetos, en una definición formal lo que hace es definir una funcionalidad a los objetos que se hereden de este y asignarles así una responsabilidad. En resumen, nos da la posibilidad de generar clases con funciones que se generen dinámicamente. Hay muchos ejemplos de este tipo en .NET, entre ellos los de manejo de ficheros (FileStream su decorador es Stream). En comparación con JAVA, esto correspondería a las clases abstractas. Ejemplo:
Public MustInherit Class PatronDecorador 'Ofrece una funcionalidad base para todos sus hijos pero 'que funcionen de manera distinta: 'por ejemplo: 'Chocolate tendrá un precio y una descripción distinta que 'la mantequilla, pero ambos se pueden derretir!. Public MustOverride Function Precio() As Double Public MustOverride Function Descripcion() As Double Public Function Derretir() As Boolean 'Derretir Return True End Function 'Obliga que sus hijos se deban instanciar de una forma concreta Public Sub New(ByVal ModificadorAcceso As String) End Sub End Class Public Class Chocolate Inherits PatronDecorador Public Overrides Function Descripcion() As Double Return "Chocolate" End Function Public Overrides Function Precio() As Double Return 10.2 End Function Public Sub New(ByVal param As String) MyBase.New(param) End Sub End Class Public Class Mantequilla Inherits PatronDecorador Public Overrides Function Descripcion() As Double Return "Mantequilla" End Function Public Overrides Function Precio() As Double Return 3.6 End Function Public Sub New(ByVal param As String) MyBase.New(param) End Sub End Class
Bueno, espero escribir más a menudo, pero el tiempo me tiene ahogado!!, en otro artículo intentaré describir los patrones estrategia, adaptadores y observadores. Saludos!!!






