Vous êtes sur la page 1sur 3

25/1/2015

QuesunPatrndeDiseo?

Qu es un Patrn de Diseo?
Por Nicols Tedeschi
Contenido
Qu es un Patrn de Diseo?
Patrones Creacionales
Patrones Estructurales
Patrones de Comportamiento
Conclusin

Qu es un Patrn de Diseo?
Esta fue la primer pregunta que me hice cuando comenc a investigar sobre este tema. Al principio no tena mucha idea de por dnde comenzar, por lo que mi primera reaccin fue
realizar una bsqueda en Internet y obtener de esta manera alguna base sobre la cual apoyarme. La definicin que ms me gust fue la siguiente:
Los patrones de diseo son el esqueleto de las soluciones a problemas comunes en el desarrollo de software.
En otras palabras, brindan una solucin ya probada y documentada a problemas de desarrollo de software que estn sujetos a contextos similares. Debemos tener presente los siguientes
elementos de un patrn: su nombre, el problema cuando aplicar un patrn, la solucin descripcin abstracta del problema y las consecuencias costos y beneficios.
Grande fue mi sorpresa al averiguar que existen varios patrones de diseo popularmente conocidos, los cuales se clasifican como se muestra a continuacin:
Patrones Creacionales: Inicializacin y configuracin de objetos.
Patrones Estructurales: Separan la interfaz de la implementacin. Se ocupan de cmo las clases y objetos se agrupan, para formar estructuras ms grandes.
Patrones de Comportamiento: Ms que describir objetos o clases, describen la comunicacin entre ellos.
Veamos un poco en qu consisten los distintos tipos de patrones, cules son sus fines y qu beneficios nos aportan.
Principio de la pgina

Patrones Creacionales
Fbrica Abstracta Abstract Factory
El problema a solucionar por este patrn es el de crear diferentes familias de objetos, como por ejemplo la creacin de interfaces grficas de distintos tipos ventana, men, botn, etc..
Mtodo de Fabricacin Factory Method
Parte del principio de que las subclases determinan la clase a implementar.
publicclassConcreteCreatorextendsCreator
{
protectedProductFactoryMethod()
{
returnnewConcreteProduct();
}
}
publicinterfaceProduct{}
publicclassConcreteProductimplementsProduct{}
publicclassClient
{
publicstaticvoidmain(Stringargs[])
{
CreatorUnCreator;
UnCreator=newConcreteCreator();
UnCreator.AnOperations();
}
}
Prototipado Prototype
Se basa en la clonacin de ejemplares copindolos de un prototipo.
Singleton
Restringe la instanciacin de una clase o valor de un tipo a un solo objeto.
publicsealedclassSingleton
{
privatestaticvolatileSingletoninstance;
privatestaticobjectsyncRoot=newObject();
privateSingleton()
{
System.Windows.Forms.MessageBox.Show("NuevoSingleton");
}
publicstaticSingletonGetInstance
{
get

https://msdn.microsoft.com/eses/library/bb972240.aspx

1/3

25/1/2015

QuesunPatrndeDiseo?

{
if(instance==null)
{
lock(syncRoot)
{
if(instance==null)
instance=newSingleton();
}
}
returninstance;
}
}
}
MVC Model View Controler
Este patrn plantea la separacin del problema en tres capas: la capa model, que representa la realidad; la capa controler , que conoce los mtodos y atributos del modelo, recibe y realiza
lo que el usuario quiere hacer; y la capa vista, que muestra un aspecto del modelo y es utilizada por la capa anterior para interaccionar con el usuario.
Principio de la pgina

Patrones Estructurales
Adaptador Adapter: Convierte una interfaz en otra.
Puente Bridge: Desacopla una abstraccin de su implementacin permitiendo modificarlas independientemente.
Objeto Compuesto Composite: Utilizado para construir objetos complejos a partir de otros ms simples, utilizando para ello la composicin recursiva y una estructura de rbol.
Envoltorio Decorator: Permite aadir dinmicamente funcionalidad a una clase existente, evitando heredar sucesivas clases para incorporar la nueva funcionalidad.
Fachada Facade: Permite simplificar la interfaz para un subsistema.
Peso Ligero Flyweight: Elimina la redundancia o la reduce cuando tenemos gran cantidad de objetos con informacin idntica.
Apoderado Proxy: Un objeto se aproxima a otro.
Principio de la pgina

Patrones de Comportamiento
Cadena de responsabilidad Chain of responsibility: La base es permitir que ms de un objeto tenga la posibilidad de atender una peticin.
Orden Command: Encapsula una peticin como un objeto dando la posibilidad de deshacer la peticin.
Intrprete Interpreter: Intrprete de lenguaje para una gramtica simple y sencilla.
Iterador Iterator: Define una interfaz que declara los mtodos necesarios para acceder secuencialmente a una coleccin de objetos sin exponer su estructura interna.
Mediador Mediator: Coordina las relaciones entre sus asociados. Permite la interaccin de varios objetos, sin generar acoples fuertes en esas relaciones.
Recuerdo Memento: Almacena el estado de un objeto y lo restaura posteriormente.
Observador Observer: Notificaciones de cambios de estado de un objeto.
PublicClassArticulo
DelegateSubDelegadoCambiaPrecio(ByValunPrecioAsObject)
PublicEventCambiaPrecioAsDelegadoCambiaPrecio
Dim_cambiaPrecioAsObject
PublicWriteOnlyPropertyPrecio()
Set(ByValvalueAsObject)
_cambiaPrecio=value
RaiseEventCambiaPrecio(_cambiaPrecio)
EndSet
EndProperty
EndClass
PublicClassArticuloObservador
PublicSubNotify(ByValunObjectoAsObject)
Console.WriteLine("Elnuevoprecioes:"&unObjecto)
EndSub
End Class
Estado Server: Se utiliza cuando el comportamiento de un objeto cambia dependiendo del estado del mismo.
Estrategia Strategy: Utilizado para manejar la seleccin de un algoritmo.
Mtodo plantilla Template Method: Algoritmo con varios pasos suministrados por una clase derivada.
Visitante Visitor: Operaciones aplicadas a elementos de una estructura de objetos heterognea.
Principio de la pgina

Conclusin
https://msdn.microsoft.com/eses/library/bb972240.aspx

2/3

25/1/2015

QuesunPatrndeDiseo?

Como vern, si es que este artculo logr ilustrar sobre las distintas categoras y tipos de patrones de diseo, no debemos reinventar la rueda en varias de nuestras aplicaciones. Hay
mucho trabajo ya realizado, testeado y aceptado que en un entorno similar a mi problema ya aporta una solucin satisfactoria. Para qu voy a inventar un ladrillo si ya otro lo hizo y el
mismo ya fue usado en la edificacin de millones de estructuras con xito?
Quienes deseen ampliar su conocimiento respecto a este tema pueden consultar la bibliografa adjunta. Adems, les comento que Microsoft no es ajeno a todo este movimiento; ms an,
es conciente de la importancia del mismo y tiene sus comentarios e ideas al respecto. El tema se reduce a una cuestin de enfoque; en el siguiente diagrama puede verse cmo presenta
Microsoft su concepcin de patrones de diseo Ver Figura 1:

Figura 1: Marco de Patrones segn Microsoft. Volver al texto.

En el diagrama de la Figura 1, Microsoft sostiene que las columnas de la tabla son enfoques o puntos de vista de la solucin, mientras que las filas representan los niveles de abstraccin.
Un ejemplo muy conocido en el ambiente de desarrollo Web es el patrn de diseo de capas layers, el cual plantea la separacin de una aplicacin en una capa de presentacin, una de
negocio y una de datos.
En un futuro artculo abordaremos un interesante concepto o paradigma, el de los ANTI Patrones, acerca del cual tom conocimiento durante mi investigacin sobre Patrones de Diseo.
Bibliografa
Design Patterns Elements of Reusable ObjectOriented Software, por Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.
Abstract Factory Pattern in VB .Net, por Rajesh V. S., http://www.vbdotnetheaven.com/Code/Jun2003/2014.asp .
Implementing the Command Pattern in .Net, http://blogs.vbcity.com/jspano/articles/198.aspx .
Implementing the Visitor Design Pattern In .Net, http://blogs.vbcity.com/jspano/articles/199.aspx .

Nicols Tedeschi es Analista de Sistemas de la Facultad de Ingeniera del Uruguay y se encuentra desarrollando tecnologa .net y SQL Server. Desde1995 trabaja con
tecnologas Microsoft de tres capas HTMLASP, COM+ y SQL Server. Es adems Desarrollador 5 Estrellas de Microsoft MSDN y ha obtenido 3 Estrellas de ese
programa.

Principio de la pgina
2015 Microsoft

https://msdn.microsoft.com/eses/library/bb972240.aspx

3/3

Vous aimerez peut-être aussi