Patrones de diseños
Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
Un patrón de diseño resulta ser una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características: debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anterior y debe ser reutilizable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.
Pretenden 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 y facilitar el aprendizaje de las nuevas generaciones de diseñadores condensando conocimiento ya existente.
De igual modo los patrones no buscan imponer ciertas alternativas de diseño frente a otras o eliminar la creatividad inherente al proceso de diseño.
Clasificación de los patrones de diseño
Los patrones de diseño se clasifican en tres tipos, dependiendo el problema que desarrollen, los cuales pueden ser creacionales, estructurales y de comportamiento.
Patrones creacionales:
- Singleton:Consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón singleton provee una única instancia global gracias a que:
- La propia clase es responsable de crear la única instancia.
- Permite el acceso global a dicha instancia mediante un método de clase.
- Declara el constructor de clase como privado para que no sea instanciable directamente.
Su diagrama es:
- Fabrica Abstracta
Se utiliza para proporcionar una interfaz común para crear una serie de objetos (productos) bajo una u otra arquitectura o framework.
El problema a solucionar por este patrón es el de crear diferentes familias de objetos, como por ejemplo la creación de interfaces gráficas de distintos tipos (ventana, menú, botón, etc.).
Su diagrama es: - Builder
es usado para permitir la creación de una variedad de objetos complejos desde un objeto fuente
Su intención es abstraer el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.
Su diagrama es: - Metodo de fabrica
Consiste en definir una interfaz para crear objetos de tipo genérico permitiendo a las subclases decidir que tipo de objetos concreto crear.
Su diagrama es: - Prototype
Crea nuevos objetos clonándolos de una instancia ya existente. La clase de los objetos que servirán de prototipo deberá incluir en su interfaz la manera de solicitar una copia, que será desarrollada luego por las clases concretas de prototipos.
Su diagrama es:
Ejemplo
Patrones creacionales en un sistema de seguridad en conjuntos residenciales
Patrones Esructurales
- Adapter
Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla. Este patrón se utiliza generalmente cuándo ya existe una interface, pero no podemos usarla.
- Brigde
Desacopla una abstracción de su implementación. Se usa en programación para desacoplar una abstracción de su implementación, de manera que ambas puedan ser modificadas independientemente sin necesidad de alterar por ello la otra.
- Composite
Permite tratar objetos compuestos como si de uno simple se tratase, es decir, construir objetos complejos partiendo de otros más sencillos utilizando una estrategia de composición recursiva.
Ejemplo en un sistema de seguridad en los conjuntos residenciales
- Decorator
Responde a la necesidad de añadir dinámicamente funcionalidad a un Objeto. Esto nos permite no tener que crear sucesivas clases que hereden de la primera incorporando la nueva funcionalidad, sino otras que la implementan y se asocian a la primera.
Ejemplo en un sistema de seguridad en los conjuntos residenciales
- Fachada
Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.
Ejemplo en un sistema de seguridad en los conjuntos residenciales
- Flyweight
Sirve para eliminar o reducir la redundancia cuando tenemos gran cantidad de objetos que contienen información idéntica, además de lograr un equilibrio entre flexibilidad y rendimiento.
Ejemplo en un sistema de seguridad en los conjuntos residenciales
- Proxy
Tiene como propósito proporcionar un subrogado o intermediario de un objeto para controlar su acceso.
Ejemplo en un sistema de seguridad en los conjuntos residenciales
Patrones de comportamiento
- Interpreter
Busca representar un lenguaje mediante reglas gramáticas. Para ello define estas reglas gramáticas y como interpretarlas. Utiliza una clase para representar una regla gramática. - Iterator
busca representar un lenguaje mediante reglas gramáticas. Para ello define estas reglas gramáticas y como interpretarlas. Utiliza una clase para representar una regla gramática. - Mediador
Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto. - Observer
Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él. - Memento
Permite capturar y exportar el estado interno de un objeto para que luego se pueda restaurar, sin romper la encapsulación. Su finalidad es almacenar el estado de un objeto (o del sistema completo) en un momento dado, de manera que se pueda restaurar posteriormente si fuese necesario. - Command
Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma. - Chain of Responsibility
Permite establecer una cadena de objetos receptores a través de los cuales se pasa una petición formulada por un objeto emisor. - State
Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno. Tiene la misión fundamental de encapsular el comportamiento de un objeto dependiendo del estado en el que éste se encuentre. - Strategy
Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución. - Template Method
Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura. - Visitor
Busca separar un algoritmo de la estructura de un objeto. La operación se implementa de forma que no se modifique el código de las clases sobre las que opera.
Informaciòn tomada de:
https://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o
http://migranitodejava.blogspot.com.co/search/label/Patrones%20Creacionales
https://msdn.microsoft.com/es-es/library/bb972240.aspx
http://migranitodejava.blogspot.com.co/search/label/Patrones%20de%20Comportamiento
http://migranitodejava.blogspot.com.co/search/label/Patrones%20Estructurales
http://www.genbetadev.com/metodologias-de-programacion/patrones-de-diseno-que-son-y-por-que-debes-usarlos
https://es.wikipedia.org/wiki/Patr%C3%B3n_de_dise%C3%B1o
http://migranitodejava.blogspot.com.co/search/label/Patrones%20Creacionales
https://msdn.microsoft.com/es-es/library/bb972240.aspx
http://migranitodejava.blogspot.com.co/search/label/Patrones%20de%20Comportamiento
http://migranitodejava.blogspot.com.co/search/label/Patrones%20Estructurales
http://www.genbetadev.com/metodologias-de-programacion/patrones-de-diseno-que-son-y-por-que-debes-usarlos