lunes, 11 de abril de 2016



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:

    Diagrama Abstract Factory.png
  • 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:
    Builder UML class diagram.svg

  • 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:
    Factory Method.png
  • 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:
    ProtipoEstructura.png
Ejemplo 
Patrones creacionales en un sistema de seguridad en conjuntos residenciales

Singleton:                                                                          



Metodo fabrica:

Builder:

Fabrica Abstracta:


Prototype



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.

    Adapter using inheritance UML class diagram.svg
    Ejemplo en un sistema de seguridad en los conjuntos residenciales

  • 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.

    Bridge classdia.png


    Ejemplo en un sistema de seguridad en los conjuntos residenciales
  • 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.

    diagrama del patrón composite

    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.

    decorador concreto

    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.

    Facade UML class diagram.svg

    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.
    Ejemplo patrón iterador 2
  • 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.
    EstructuraPatronObservador.png
  • 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.
    Command Design Pattern Class Diagram.png
  • 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.
    Estructura general
  • 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.

    Diagrama UML del patrón de diseño State
  • 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.

    Estructura.png