¡GoConqr estrena diseño! Cuéntanos qué te parece.

Mapa mental

Patrones de diseño

Jorge Martin Ixta Martinez Inglés

Patrones de diseño

Contenido del mapa

Patrones de diseño

  1. Creacionales

    • Factory
      • Principio
        • Dependa de abstracciones. No dependa de clases concretas.
      • Abstracto
        • Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas
        • Características
          • Crea familias de objetos relacionados sin tener que depender de sus clases concretas.
          • Permite que una clase difiera la instanciación a sus subclases.
          • Se basa en la composición de objetos.
            • La creación de objetos se implementa en métodos expuestos en la interfaz de fábrica.
      • Simple
        • Define una interfaz para crear un objeto, pero permite que las subclases decidan qué clase instanciar.
        • Este patrón permite que una clase difiera la instanciación a subclases.
        • Características
          • Es una forma sencilla de desvincular a sus clientes de las clases concretas.
      • Características generales
        • Encapsula la creación de objetos.
        • Promueve un acoplamiento flexible al reducir la dependencia de su aplicación en las clases de concreto.
        • Se basa en la herencia
    • Singleton
      • Garantiza que una clase tenga solo una instancia y proporciona un punto global de acceso a ella.
      • Características
        • Asegura que tenga como máximo una instancia de una clase en su aplicación.
        • Proporciona un punto de acceso global a esa instancia.
        • Su implementación hace uso de un constructor privado.
          • Un método estático combinado con una variable estática.
        • Si se usan varios cargadores de clases, se podría frustrar la implementación de Singleton y resultar en múltiples instancias.
    • Builder
      • Separa la creación de un objeto complejo de su estructura, de tal forma que el mismo proceso de construcción nos puede servir para crear representaciones diferentes.
      • Se aplica cuando
        • Nuestro sistema trata con objetos complejos (compuestos por muchos atributos) pero el número de configuraciones es limitada.
        • El algoritmo de creación del objeto complejo puede independizarse de las partes que lo componen y del ensamblado de las mismas.
      • Características
        • Encapsula la forma en que se construye un objeto complejo.
        • Permite que los objetos se construyan en un proceso variable y de varios pasos.
        • Oculta la representación interna del producto al cliente.
    • Protorype
      • Permite la creación de objetos basados en "plantillas". Un nuevo objeto se crea a partir de la clonación de otro objeto.
      • Características
        • Oculta las complejidades de hacer nuevas instancias del cliente.
        • Proporciona la opción para que el cliente genere objetos cuyo tipo se desconoce.
        • En algunas circunstancias, copiar un objeto puede ser más eficaz que crear uno nuevo.
      • Se usa cuando
        • La creación de nuevos objetos acarrea un coste computacional elevado.
        • Los objetos a crear tienen o suelen tener atributos que repiten su valor.
  2. Estructurales

    • Decorator
      • Adjunte responsabilidades adicionales a un objeto de forma dinámica.
      • Los decoradores brindan una alternativa flexible a la subclasificación para extender.
      • Principio
        • Las clases deben estar abiertas para extensión pero cerradas para modificaciones.
      • Características:
        • La herencia es una forma de extensión, pero no necesariamente la mejor manera de lograr flexibilidad en los diseños.
        • En los diseños debemos permitir que se amplíe el comportamiento sin necesidad de modificar el código existente.
        • La composición y la delegación a menudo se pueden usar para agregar nuevos comportamientos en tiempo de ejecución.
        • Proporciona una alternativa a la subclasificación para extender el comportamiento.
        • Implica un conjunto de clases de decorador que se utilizan para envolver componentes concretos.
        • Las clases de decoradores reflejan el tipo de componentes que decoran.
        • Los decoradores cambian el comportamiento de sus componentes agregando nueva funcionalidad antes y / o después (o incluso en lugar de) las llamadas al método al componente.
        • Puede envolver un componente con cualquier número de decoradores.
        • Los decoradores pueden resultar en muchos objetos pequeños en nuestro diseño, y el uso excesivo puede ser complejo.
    • Adapter
      • Convierte la interfaz de una clase en otra interfaz que esperan los clientes
      • Permite que las clases trabajen juntas que de otra manera no podrían debido a interfaces incompatibles
      • Características
        • Permite adaptar clases en dominios totalmente diferentes.
        • Un único adaptador puede adaptar la funcionalidad de múltiples clases.
        • Dependiendo de la implementación, el adaptador puede contener múltiples punteros que incrementen la complejidad del sistema.
      • Se usa cuando
        • Pretendemos usar una clase existente cuya interfaz no es compatible con la requerida.
    • Facade
      • Proporciona una interfaz unificada a un conjunto de interfaces en un subsistema.
      • Define una interfaz de nivel superior que facilita el uso del subsistema.
      • Características
        • Simplifica el uso de sistemas complejos con tareas redundantes.
        • Reduce el acoplamiento entre el subsistema y los clientes.
      • Se aplica cuando
        • Nuestro sistema cliente tiene que acceder a parte de la funcionalidad de un sistema complejo.
        • Hay tareas o configuraciones muy frecuentes y es conveniente simplificar el código de uso.
    • Bridge
      • Desacopla una abstracción de su implementación, para que las dos puedan evolucionar de forma independiente.
      • Se usa cuando
        • Queremos evitar enlaces permanentes entre una abstracción y una implementación.
        • Queremos que los cambios en la implementación de una abstracción no afecten al cliente.
        • Necesitamos que la implementación de una característica sea compartida entre múltiples objetos.
      • Características
        • Una implementación no se limita permanentemente a una interface.
        • La implementación de una abstracción puede ser configurada y/o cambiada en tiempo de ejecución.
        • Cambiar una implementación no requiere recompilar la clase Abstraction ni sus clientes.
    • Composite
      • Facilita la creación de estructuras de objetos en árbol, donde todos los elementos emplean una misma interfaz.
      • Se aplica cuando
        • El usuario ignora la diferencia entre composiciones de objetos y objetos individuales.
        • Se detecta que se están utilizando varios objetos de la misma manera, y con frecuencia tienen código casi idéntico para manejarlos.
      • Características
        • Estructura nuestro programa de tal manera que clarifica las jerarquías de clases implicadas.
        • Hace el cliente simple.
        • Permite tratar la estructura y los objetos individuales
    • FlyWeight
      • Se usa cuando
        • Una instancia de una clase pueda utilizarse para proporcionar muchas "instancias virtuales".
      • Características
        • Reduce el número de instancias de objetos en tiempo de ejecución, ahorrando memoria.
        • Centraliza el estado de muchos objetos "virtuales" en una única ubicación.
    • Proxy
      • Es una clase que funciona como interfaz hacia cualquier otra cosa.
      • Se usa cuando
        • Se necesita una referencia a un objeto más flexible o sofisticada que un puntero.
      • Proxy remoto
        • Representa un objeto en otro espacio de direcciones.
      • Proxy virtual
        • Retrasa la creación de objetos costosos.
      • Proxy de protección
        • Controla el acceso a un objeto.
  3. De comportamiento

    • Observer
      • Define una dependencia de uno a muchos entre los objetos de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.
      • Principio de diseño
        • Esfuércese por lograr diseños poco ajustados entre objetos que interactúan.
      • Características:
        • Lo único que el sujeto sabe sobre un observador es que implementa una determinada interfaz (la interfaz Observer). No necesita conocer la clase concreta del observador, lo que hace o cualquier otra cosa al respecto.
        • Podemos agregar nuevos observadores en cualquier momento.
        • Podemos reemplazar cualquier observador en tiempo de ejecución con otro observador
        • Podemos eliminar observadores en cualquier momento.
        • Podemos reutilizar sujetos u observadores independientemente unos de otros. Si nosotros
        • Los cambios en el sujeto o en un observador no afectarán al otro.
    • Command
      • Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse.
      • Se aplica cuando
        • Precisamos de colas, pilas u otras estructuras para gestionar las invocaciones.
        • Exista la posibilidad de cancelar operaciones.
        • Se necesite parametrizar de manera uniforme las invocaciones.
      • Características
        • Desacoplamiento de la aplicación que invoca las órdenes y la implementación de las mismos.
        • Como las órdenes son objetos, podemos aplicar la herencia a las mismas o realizar composiciones de órdenes.
        • Permite modificar las órdenes a ejecutar en tiempo de ejecución.
    • Chain of responsibility
      • Se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo.
      • Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena.
      • Se aplica cuando
        • Varios objetos pueden manejar cierta petición, y el manejador no se conoce a priori, sino que debería determinarse automáticamente.
      • Características
        • Elimina o reduce el acoplamiento existente entre el emisor y el receptor del mensaje.
        • Flexibilidad a la hora de establecer las responsabilidades, permitiendo modificarlas en tiempo de ejecución.
    • Interpreter
      • Define una representación para una gramática así como el mecanismo para evaluarla.
      • Se usa cuando
        • Debemos trabajar con sentencias de un lenguaje que nuestro lenguaje de programación no reconoce automáticamente.
        • La gramática del lenguaje con el que debemos trabajar es sencilla.
      • Características
        • Fácil modificación y ampliación de los elementos gramaticales
        • Su implementación es sencilla
        • La implementación de los métodos para cada elemento del lenguaje es dinámica
    • Iterator
      • Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica.
      • Se usa cuando
        • Debemos aplicar este patrón cuando tengamos que trabajar con objetos que internamente trabajan sobre un grupo de elementos y debamos poder manejar dichos elementos sin que un cambio en la implementación de la lista o conjunto afecte al sistema global.
      • Características
        • Estandariza el tratado de elementos de listas con implementaciones independientes.
        • Permite variar el tratamiento de las listas modificando tan solo la clase que implementa el iterador.
        • Se pueden realizar múltiples recorridos simultáneos.
    • Mediator
      • Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí.
      • Se usa cuando
        • La reutilización de un objeto es difícil ya que es dependiente de muchos otros.
      • Características
        • Desacopla a los integrantes del sistema de sus interacciones.
        • Simplifica la comunicación entre objetos
    • Memento
      • Este patrón otorga la capacidad de restaurar un objeto a un estado anterior
      • Características
        • Mantiene encapsulados los datos del objeto clave.
        • Proporciona una capacidad de recuperación fácil de implementar
        • Se utiliza para guardar el estado.
        • Un inconveniente de usar Memento es que guardar y restaurar el estado puede llevar mucho tiempo.
    • State
      • Permite modificar la forma en que un objeto se comporta en tiempo de ejecución, basándose en su estado interno.
      • Características
        • Representa el estado como una clase en toda regla.
        • El Contexto obtiene su comportamiento delegando al objeto de estado actual con el que está compuesto.
        • Al encapsular cada estado en una clase, localizamos cualquier cambio que sea necesario realizar.
        • Las transiciones de estado pueden ser controladas por las clases de estado o por las clases de contexto.
        • El uso del patrón de estado generalmente dará como resultado un mayor número de clases en su diseño.
    • Strategy
      • Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución.
      • Características
        • Configura una clase con un determinado comportamiento entre muchos posibles.
        • Evitar exponer estructuras de datos complejas y dependientes del algoritmo
        • ofrece una alternativa a las sentencias condicionales para seleccionar el comportamiento deseado.
        • Las jerarquías de clases Estrategia definen una familia de algoritmos o comportamientos
    • Template Method
      • Especifica el esqueleto de un algoritmo, permitiendo a las subclases definir cómo implementan el comportamiento real.
      • Características
        • Brinda una técnica importante para la reutilización del código.
        • Su clase abstracta puede definir métodos concretos, métodos abstractos y ganchos.
        • Los métodos abstractos se implementan por subclases.
        • Los Hooks son métodos que no hacen nada o tienen un comportamiento predeterminado en la clase abstracta, pero pueden ser anulados en la subclase.
    • Visitor
      • Permite separar el algoritmo de la estructura de datos que se utilizará para ejecutarlo.
      • Características
        • Le permite agregar operaciones a una estructura compuesta sin cambiar la estructura en sí.
        • Agregar nuevas operaciones es relativamente fácil.
        • El código para las operaciones realizadas por el Visitante está centralizado

Imágenes y archivos del mapa

  • Patrones de diseño

Información

Descripción
Mapa Mental sobre Patrones de diseño, creado por Jorge Martin Ixta Martinez el 04/10/2020.
Creado por
Jorge Martin Ixta Martinez · oct 2020
Actualizado
9 oct 2020
Visitas
1
Valoración

Escríbenos

¿Sobre qué es tu mensaje?

¿Qué te parece el nuevo diseño?

¿Te gusta?