Resúmen


¿Qué es un patrón de software?
Los patrones de software no son más que un conjunto de literatura sobre la resolución de problemas habituales en el diseño de software, que ha sido aceptada como correcta, a la que se le ha dado un nombre y que puede ser aplicada en varios contextos.

PATRONES DE DISEÑO:
Un patrón de diseño es una solución estándar  a un problema común de diseño.

Tiene 4 elementos:
  * Nombre: Permite describir un problema de diseño junto con sus soluciones y consecuencias.   
 *   Problema: Describe cuándo aplicar el patrón.
 * Solución: Describe los elementos que constituyen el diseño, sus relaciones, responsabilidades y colaboraciones.
  * Consecuencias: son los resultados de aplicar el patrón.


Se dividen en 3 categorías:   
    *  Creación: Abstraen el proceso de creación de instancias de objetos.
    * Estructurales: Se ocupan de cómo las clases y objetos son utilizados para componer estructuras de mayor tamaño.
    * Comportamiento: Caracterizan el modo en que las clases y objetos interactúan y se reparten la responsabilidad.

Ventajas:
La reutilización de nuevos requisitos y cambios. Facilitan la reusabilidad, extensibilidad, mantenimiento, flexibles en su utilización, facilitan la documentación, variedad de patrones que resuelven un mismo problema.

Desventajas:
Pueden disminuir la capacidad de comprensión de un diseño o de una implementación, puede generar menor rendimiento, puede aumentar la cantidad de código, disminuir la modularidad.


PATRON FACTORY:
Consiste en crear objetos de un tipo determinado en tiempo de ejecución, crear objetos (familias de objetos) cuando no sabemos la clase exacta del objeto que va a ser creado. De esta manera encapsulamos clases en una clase general de la que heredarán distintas subclases.
Un objeto especializado se encarga de instanciar objetos para clientes, y estos utilizan los métodos que proporciona la interfaz del objeto recibido, pero sin saber nada de las interioridades del objeto, ni siquiera qué tipo de objeto es.

Problema que resuelve este patrón: Crear un objeto sin especificar la clase a la que pertenece, la instancia del objeto a crear depende de condiciones externas a la clase. Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al cliente la elección el subtipo a crear.

PATRON SINGLETON
El Patrón Singleton sirve para cuando buscamos restringir la creación de instancias de un objeto, obligando que solo se pueda crear una única instancia. Permite crear un objeto que va a ser accedido por diferentes partes de nuestra aplicación. Un claro ejemplo de es una conexión de base de datos.

Problema que resuelve este patrón: cuando no se puede tener más de una instancia de una clase, y cuando se necesita controlar acceso a una clase. Cuando se necesita restringir que una clase solo devuelva una única instancia de ella lo largo de toda la ejecución del programa.

PATRÓN OBSERVADOR – OBSERVER

Problema
¿Cómo tener una visión actualizada de los datos desde diferentes instancias o módulos de una misma aplicación donde los datos pueden ser modificados?

Intención
-Mantener distintos objetos relacionados,  relaciones uno-a-muchos (1 : N).
-Mantener las dependencias entre objetos, sin necesidad de conocer al otro objeto.

Solución
El patrón Observador define una dependencia del tipo uno-a-muchos (1: n) entre objetos, de manera que cuando el objeto 1 cambia su estado, el observador se encarga de notificar este cambio a todos los n objetos dependientes para que se actualicen automáticamente. Proporciona mecanismos para “registrar” objetos observadores en el objeto observable y notificar a aquellos cuando este sufre una notificación. El patrón Observador es un patón de comportamiento.





PATRÓN CADENA DE MANDO - CADENA DE RESPONSABILIDAD

Problema
¿Cómo Integrar distintos receptores que pueden atender  las peticiones emitidas por un objeto evitando el acoplamiento entre un emisor y un solo receptor?

Intención
-Evitar acoplar el emisor de un mensaje a su receptor dándole a más de un objeto la posibilidad de manejar la solicitud. Se define una cadena de objetos, de modo que un objeto pasa la solicitud al siguiente en la cadena hasta que uno la maneja.

Solución
El patrón de diseño 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. Cualquiera de los objetos receptores puede responder a la petición en función de un criterio establecido, cuando un objeto receptor responde el proceso se detiene. Es un patrón de comportamiento.


PATRÓN ESTRATEGIA

Problema
-¿Cómo diseñar el sistema para que varíen los algoritmos o las políticas, pero que estén relacionados a la vez?
-¿Cómo diseñar el sistema para que, según la capacidad, cambien estos algoritmos o políticas?

Intención
-Encapsular algoritmos relacionados en clases y  hacerlos intercambiables.
-Permitir variar los algoritmos haciéndolos independientes de los clientes que los utilizan.

Solución
Patrón de comportamiento a nivel de objetos. Define una familia de algoritmos, encapsula cada uno, y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo utilizan.