GoConqr has a new look! Let us know what you think.

Mind map

PATRONES DE DISEÑO GoF

Jose Cervera Spanish

Mapa mental sobre patrones de diseño GoF: patrones de comportamiento, creacionales y estructurales

Mapa mental: Patrones de diseño GoF

Map content

PATRONES DE DISEÑO GoF

  1. PATRONES DE COMPORTAMIENTO

    • Funciones
      • gestionar algoritmos, relaciones y responsabilidades entre objetos.
      • Alejan su enfoque del flujo de control para concentrarse solo en la forma en que los objetos están interconectados.
      • Usan la herencia para distribuir el comportamiento entre clases.
    • Tipos
      • Chain of Responsibility
        • Cuando utilizarlo
          • cuando se espera que su programa procese diferentes tipos de solicitudes de varias maneras, pero los tipos exactos de solicitudes y sus secuencias se desconocen de antemano.
          • cuando sea esencial ejecutar varios manejadores en un orden particular
          • cuando se supone que el conjunto de controladores y su orden cambian en el tiempo de ejecución.
        • Ventajas
          • Puede controlar el orden de manejo de solicitudes.
          • Principio de responsabilidad única . Puede desacoplar clases que invocan operaciones de clases que realizan operaciones.
          • Principio abierto / cerrado . Puede introducir nuevos controladores en la aplicación sin romper el código de cliente existente.
        • Desventajas
          • Algunas solicitudes pueden terminar sin ser manejadas.
        • Características
          • Evita acoplar el emisor y al receptor de una petición
          • Posibilidad de más de un objeto para responder una petición.
          • Crea una cadena con los objetos receptores
            • pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.
        • Diseño UML
        • Función
          • permite pasar solicitudes a lo largo de una cadena de controladores.
      • Command
        • Características
          • Encapsula una petición o acción en un objeto
          • Parametrizar a los clientes con distintas peticiones,
          • Registro de las peticiones y poder deshacer operaciones.
        • Cuando utilizarlo
          • cuando desee parametrizar objetos con operaciones.
          • cuando desee poner en cola las operaciones, programar su ejecución o ejecutarlas de forma remota.
          • cuando desee implementar operaciones reversibles.
        • Ventajas
          • Principio de responsabilidad única . Puede desacoplar clases que invocan operaciones de clases que realizan estas operaciones.
          • Principio abierto / cerrado . Puede introducir nuevos comandos en la aplicación sin romper el código del cliente existente.
          • Puede implementar deshacer / rehacer.
          • Puede implementar la ejecución diferida de operaciones.
          • Puede ensamblar un conjunto de comandos simples en uno complejo.
        • Desventajas
          • El código puede volverse más complicado ya que está introduciendo una capa completamente nueva entre remitentes y receptores.
        • Diagrama UML
        • Función
          • convierte una solicitud en un objeto independiente que contiene toda la información sobre la solicitud.
      • Interpreter
        • Características
          • Necesita un lenguaje dado
          • define representación de la gramática del lenguaje dado
          • Interpreta las sentencias del lenguaje
        • Cuando utilizarlo
          • Cuando debemos trabajar con sentencias de un lenguaje que nuestro lenguaje de programación no reconoce automáticamente.
          • Cuando la gramática del lenguaje con el que debemos trabajar es sencilla.
          • No debe utilizarse si ya existe alguna clase nativa que interprete éste lenguaje
        • Ventajas
          • 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
        • Desventajas
          • No es muy eficiente.
          • No cubre gramáticas complejas.
        • Diagrama UML
        • Función
          • interpretar un lenguaje definido previamente mediante su gramática.
      • Iterator
        • Cuando utilizarlo
          • cuando su colección tenga una estructura de datos compleja bajo el capó, pero desea ocultar su complejidad a los clientes
          • para reducir la duplicación del código transversal en su aplicación.
          • cuando desee que su código pueda atravesar diferentes estructuras de datos o cuando los tipos de estas estructuras sean desconocidos de antemano.
        • Características
          • Permite acceder secuencialmente a los elementos de un objeto
          • No expone la representación interna del objeto
        • Ventajas
          • Principio de responsabilidad única . Puede limpiar el código del cliente y las colecciones extrayendo algoritmos transversales voluminosos en clases separadas.
          • Principio abierto / cerrado . Puede implementar nuevos tipos de colecciones e iteradores y pasarlos al código existente sin romper nada.
          • Puede iterar sobre la misma colección en paralelo porque cada objeto iterador contiene su propio estado de iteración.
          • Por la misma razón, puede retrasar una iteración y continuarla cuando sea necesario.
        • Desventajas
          • Aplicar el patrón puede ser una exageración si su aplicación solo funciona con colecciones simples.
          • Usar un iterador puede ser menos eficiente que pasar directamente por elementos de algunas colecciones especializadas.
        • Diagrama UML
        • Función
          • permite recorrer elementos de una colección sin exponer su representación subyacente (lista, pila, árbol, etc.).
      • Mediator
        • Características
          • Promueve bajo acoplamiento
          • Evita que objetos se refieran entre ellos explícitamente
          • Permite interacción entre objetos de forma independiente
        • Función
          • permite reducir las dependencias caóticas entre los objetos.
        • Cuando utilizarlo
          • cuando sea difícil cambiar algunas de las clases porque están estrechamente acopladas a un montón de otras clases.
          • cuando no pueda reutilizar un componente en un programa diferente porque depende demasiado de otros componentes.
          • cuando se encuentre creando toneladas de subclases de componentes solo para reutilizar algunos comportamientos básicos en varios contextos.
        • Ventajas
          • Principio de responsabilidad única . Puede extraer las comunicaciones entre varios componentes en un solo lugar, lo que facilita su comprensión y mantenimiento.
          • Principio abierto / cerrado . Puede introducir nuevos mediadores sin tener que cambiar los componentes reales.
          • Puede reducir el acoplamiento entre varios componentes de un programa.
          • Puede reutilizar componentes individuales más fácilmente.
        • Desventajas
          • Con el tiempo, un mediador puede convertirse en un Objeto de Dios .
      • Memento
        • Función
          • permite guardar y restaurar el estado anterior de un objeto sin revelar los detalles de su implementación.
        • Cuando utilizarlo
          • cuando desee producir instantáneas del estado del objeto para poder restaurar un estado anterior del objeto.
          • cuando el acceso directo a los campos / captadores / definidores del objeto viola su encapsulación.
        • Características
          • Representa el estado interno de un objeto
          • No viola la encapsulación
          • El objeto puede volver a un estado anterior
        • Ventajas
          • Puede producir instantáneas del estado del objeto sin violar su encapsulación.
          • Puede simplificar el código del autor dejando que el cuidador mantenga el historial del estado del autor.
        • Desventajas
          • La aplicación puede consumir mucha RAM si los clientes crean recuerdos con demasiada frecuencia.
          • Los cuidadores deben rastrear el ciclo de vida del originador para poder destruir recuerdos obsoletos.
          • La mayoría de los lenguajes de programación dinámicos, como PHP, Python y JavaScript, no pueden garantizar que el estado dentro del recuerdo permanezca intacto.
      • Observer
        • Función
          • Permite definir un mecanismo de suscripción para notificar a varios objetos sobre cualquier evento que le suceda al objeto que está observando.
        • Características
          • Dependencia 1-a-N entre objetos
          • Los observadores se suscriben a un sujeto
          • Al cambiar el sujeto se notifica a suscriptores
        • Cuando utilizarlo
          • cuando los cambios en el estado de un objeto pueden requerir cambiar otros objetos, y el conjunto real de objetos es desconocido de antemano o cambia dinámicamente.
          • cuando algunos objetos en su aplicación deben observar a otros, pero solo por un tiempo limitado o en casos específicos.
        • Ventajas
          • Principio abierto / cerrado . Puede introducir nuevas clases de suscriptor sin tener que cambiar el código del editor (y viceversa si hay una interfaz de editor).
          • Puede establecer relaciones entre objetos en tiempo de ejecución.
        • Desventajas
          • Los suscriptores son notificados en orden aleatorio.
      • State
        • Desventajas
          • Aplicar el patrón puede ser excesivo si una máquina de estado tiene solo unos pocos estados o rara vez cambia.
        • Ventajas
          • Simplifique el código del contexto eliminando los voluminosos condicionales de las máquinas de estado.
          • Principio abierto / cerrado . Introducir nuevos estados sin cambiar las clases de estado existentes o el contexto.
          • Principio de responsabilidad única . Organice el código relacionado con estados particulares en clases separadas.
        • Características
          • Permite cambiar el comportamiento de un objeto en ejecución
            • Cambia su estado interno
        • Cuando utilizarlo
          • cuando se tenga un objeto que se comporte de manera diferente dependiendo de su estado actual, el número de estados es enorme y el código específico del estado cambia con frecuencia.
          • cuando se tenga una clase contaminada con condicionales masivos que alteren el comportamiento de la clase de acuerdo con los valores actuales de los campos de la clase.
          • cuando se tenga una gran cantidad de código duplicado en estados y transiciones similares de una máquina de estados basada en condiciones.
        • Función
          • permite que un objeto modifique su comportamiento cuando cambia su estado interno. Parece que el objeto cambió su clase.
      • Strategy
        • Función
          • permite definir una familia de algoritmos, colocar cada uno de ellos en una clase separada y hacer que sus objetos sean intercambiables.
        • Cuando utilizarlo
          • cuando su clase tenga un operador condicional masivo que cambie entre diferentes variantes del mismo algoritmo.
          • para aislar la lógica de negocios de una clase de los detalles de implementación de algoritmos que pueden no ser tan importantes en el contexto de esa lógica.
          • cuando tenga muchas clases similares que solo difieren en la forma en que ejecutan algún comportamiento.
          • cuando desee utilizar diferentes variantes de un algoritmo dentro de un objeto y poder cambiar de un algoritmo a otro durante el tiempo de ejecución.
        • Características
          • Define una familia de algoritmos
            • Permite variación del algoritmo seleccionado
              • Independiente de los clientes que lo usan
            • hace los algoritmos encapsulables
        • Ventajas
          • Puede intercambiar algoritmos utilizados dentro de un objeto en tiempo de ejecución.
          • Puede aislar los detalles de implementación de un algoritmo del código que lo usa.
          • Puede reemplazar la herencia con la composición.
          • Principio abierto / cerrado . Puede introducir nuevas estrategias sin tener que cambiar el contexto.
        • Desventajas
          • Si solo tiene un par de algoritmos y rara vez cambian, no hay una razón real para complicar demasiado el programa con nuevas clases e interfaces que vienen junto con el patrón.
          • Los clientes deben ser conscientes de las diferencias entre las estrategias para poder seleccionar una adecuada.
          • Muchos lenguajes de programación modernos tienen soporte de tipo funcional que le permite implementar diferentes versiones de un algoritmo dentro de un conjunto de funciones anónimas
      • Template method
        • Desventajas
          • Los métodos de plantilla tienden a ser más difíciles de mantener cuanto más pasos tienen.
          • Puede violar el Principio de sustitución de Liskov
          • Algunos clientes pueden estar limitados por el esqueleto proporcionado de un algoritmo.
        • Ventajas
          • Puede permitir que los clientes anulen solo ciertas partes de un algoritmo grande
          • Puede extraer el código duplicado en una superclase.
        • Características
          • Define el esqueleto de un algoritmo
          • Permite a las subclases redefinir el algoritmo
            • No cambia su estructura
        • Cuando utilizarlo
          • cuando se desee que los clientes extiendan solo pasos particulares de un algoritmo, pero no todo el algoritmo o su estructura.
          • cuando tenga varias clases que contengan algoritmos casi idénticos con algunas diferencias menores. Como resultado, es posible que deba modificar todas las clases cuando cambie el algoritmo.
        • Función
          • define el esqueleto de un algoritmo en la superclase, pero permite que las subclases anulen los pasos específicos del algoritmo sin cambiar su estructura.
      • Visitor
        • Desventajas
          • Debe actualizar todos los visitantes cada vez que se agrega o elimina una clase de la jerarquía de elementos.
          • Los visitantes pueden carecer del acceso necesario a los campos y métodos privados de los elementos con los que deben trabajar.
        • Ventajas
          • Principio abierto / cerrado . Puede introducir un nuevo comportamiento que pueda funcionar con objetos de diferentes clases sin cambiar estas clases
          • Principio de responsabilidad única . Puede mover varias versiones del mismo comportamiento a la misma clase.
          • Un objeto visitante puede acumular información útil mientras trabaja con varios objetos.
        • Características
          • Representa una operación
            • sobre una estructura de objetos
          • Permite nueva operación sin cambiar clases
          • Separa el algoritmo de la estructura de datos
        • Cuando utilizarlo
          • cuando necesite realizar una operación en todos los elementos de una estructura de objeto compleja
          • cuando un comportamiento tenga sentido solo en algunas clases de una jerarquía de clases, pero no en otras.
        • Función
          • permite separar algoritmos de los objetos en los que operan.
  2. PATRONES CREACIONALES

    • Funciones
      • Abstraen el proceso de creación de instancias
      • Ayuda a hacer sistemas independientes de objetos en cuanto a
        • Creación
        • Composición
        • Representación
      • Utiliza herencia para la clase que se instancia
      • El proceso de creación puede ser desacoplado del sistema
    • Tipos
      • Abstract Factory
        • Características
          • Proporciona interfaz para crear familia de objetos
            • No es necesario especificar sus clases concretas
        • Desventajas
          • El código puede volverse más complicado de lo que debería ser, ya que se introducen muchas nuevas interfaces y clases junto con el patrón.
        • Ventajas
          • Puede estar seguro de que los productos que obtiene de una fábrica son compatibles entre sí.
          • Evita el acoplamiento estrecho entre productos concretos y el código del cliente.
          • Principio de responsabilidad única . Puede extraer el código de creación del producto en un solo lugar, haciendo que el código sea más fácil de soportar.
          • Principio abierto / cerrado . Puede introducir nuevas variantes de productos sin romper el código de cliente existente.
        • Cuando utilizarlo
          • cuando su código necesite trabajar con varias familias de productos relacionados, pero no desea que dependa de las clases concretas de esos productos; pueden ser desconocidos de antemano o simplemente desea permitir una futura extensibilidad.
        • Función
          • permite producir familias de objetos relacionados sin especificar sus clases concretas.
      • Builder
        • Desventajas
          • La complejidad general del código aumenta ya que el patrón requiere la creación de múltiples clases nuevas
        • Ventajas
          • Puede construir objetos paso a paso, diferir los pasos de construcción o ejecutar pasos de forma recursiva.
          • Puede reutilizar el mismo código de construcción al crear varias representaciones de productos.
          • Principio de responsabilidad única
        • Características
          • Separa la construcción de un objeto de su representación
          • el mismo proceso de construcción puede crear representaciones diferentes
        • Cuando utilizarlo
          • cuando desee que su código pueda crear diferentes representaciones de algún producto (por ejemplo, casas de piedra y madera).
          • para construir árboles compuestos u otros objetos complejos.
        • Función
          • permite producir diferentes tipos y representaciones de un objeto utilizando el mismo código de construcción.
      • Factory Method
        • Función
          • proporciona una interfaz para crear objetos en una superclase, pero permite que las subclases alteren el tipo de objetos que se crearán.
        • Cuando utilizarlo
          • cuando no sepa de antemano los tipos exactos y las dependencias de los objetos con los que su código debería funcionar.
          • cuando desee proporcionar a los usuarios de su biblioteca o marco una forma de ampliar sus componentes internos.
          • cuando desee ahorrar recursos del sistema reutilizando objetos existentes en lugar de reconstruirlos cada vez.
        • Características
          • Define una interfaz para crear un objeto
          • Las sublcases deciden que clase instanciar
        • Ventajas
          • Evita el acoplamiento estrecho entre el creador y los productos de hormigón.
          • Principio de responsabilidad única .
          • Principio abierto / cerrado .
        • Desventajas
          • El código puede volverse más complicado ya que necesita introducir muchas subclases nuevas para implementar el patrón
      • Prototype
        • Desventajas
          • Clonar objetos complejos que tienen referencias circulares puede ser muy complicado.
        • Ventajas
          • Puede clonar objetos sin acoplarlos a sus clases concretas.
          • Puede deshacerse del código de inicialización repetido a favor de la clonación de prototipos preconstruidos.
          • Puede producir objetos complejos más convenientemente.
        • Características
          • Cuenta con una instancia prototípica
          • Los objetos se crean copiando un prototipo
          • Especifica los tipos de objetos a crear
        • Cuando utilizarlo
          • cuando su código no dependa de las clases concretas de objetos que necesita copiar.
          • uando desee reducir el número de subclases que solo difieren en la forma en que inicializan sus respectivos objetos.
        • Función
          • permite copiar objetos existentes sin hacer que su código dependa de sus clases.
      • Singleton
        • Características
          • Garantiza una sola instancia de clase
          • Proporciona un punto de acceso global a una instancia realizada
        • Desventajas
          • Viola el principio de responsabilidad única . El patrón resuelve dos problemas a la vez.
          • puede enmascarar un mal diseño, por ejemplo, cuando los componentes del programa se conocen demasiado entre sí.
          • requiere un tratamiento especial en un entorno multiproceso para que varios subprocesos no creen un objeto singleton varias veces.
        • Ventajas
          • Puede estar seguro de que una clase tiene una sola instancia.
          • Obtiene un punto de acceso global a esa instancia.
          • El objeto singleton se inicializa solo cuando se solicita por primera vez.
        • Cuando utilizarlo
          • uando una clase en su programa debe tener una sola instancia disponible para todos los clientes
          • cuando necesite un control más estricto sobre las variables globales.
        • Función
          • permite asegurarse de que una clase tenga solo una instancia, al tiempo que proporciona un punto de acceso global a esta instancia.
  3. PATRONES ESTRUCTURALES

    • Funciones
      • Definen componen las clases y los objetos para formar estructuras más grandes
      • usan la herencia para componer interfaces o implementaciones
      • Facilitan la modelización de nuestros software
      • Especificando la forma en la que unas clases se relacionan con otras.
      • Solucionan problemas de composición
    • Tipos
      • Adapter
        • Desventajas
          • La complejidad general del código aumenta porque necesita introducir un conjunto de nuevas interfaces y clases.
        • Ventajas
          • Principio de responsabilidad única . Puede separar la interfaz o el código de conversión de datos de la lógica comercial principal del programa.
          • Principio abierto / cerrado . Puede introducir nuevos tipos de adaptadores en el programa sin romper el código del cliente existente
        • Características
          • Objeto intermedio para comunicar clases
          • Permite a clases con diferentes interfaces trabajar entre ellas
        • Cuando usarlo
          • cuando quiera usar alguna clase existente, pero su interfaz no es compatible con el resto de su código.
          • cuando desee reutilizar varias subclases existentes que carecen de alguna funcionalidad común que no se puede agregar a la superclase.
        • Función
          • permite la colaboración de objetos con interfaces incompatibles.
      • Bridge
        • Desventajas
          • Puede hacer que el código sea más complicado aplicando el patrón a una clase altamente coherente.
        • Ventajas
          • Puede crear clases y aplicaciones independientes de la plataforma.
          • El código del cliente funciona con abstracciones de alto nivel.
          • Principio abierto / cerrado .
          • Principio de responsabilidad única . Puede centrarse en la lógica de alto nivel en la abstracción
        • Características
          • Desacopla una abstracción de su implementación
            • Permite evolucionar de forma independiente
        • Cuando usarlo
          • cuando desee dividir y organizar una clase monolítica que tenga varias variantes de alguna funcionalidad
          • cuando necesite extender una clase en varias dimensiones ortogonales (independientes).
          • si necesita poder cambiar implementaciones en tiempo de ejecución.
        • Función
          • permite dividir una clase grande o un conjunto de clases estrechamente relacionadas en dos jerarquías separadas
      • Composite
        • Función
          • permite componer objetos en estructuras de árbol y luego trabajar con estas estructuras como si fueran objetos individuales.
        • Cuando utilizarlo
          • cuando tenga que implementar una estructura de objeto con forma de árbol.
          • cuando desee que el código del cliente trate los elementos simples y complejos de manera uniforme.
        • Características
          • Comiba objetos en estructuras de árbol
          • Todos los elementos emplean una misma interfaz
          • Permite tratar de manera uniforme a objetos
            • Individuales
            • Compuestos
        • Ventajas
          • Puede trabajar con estructuras arbóreas complejas de manera más conveniente: utilice el polimorfismo y la recursividad para su ventaja.
          • Principio abierto / cerrado .
        • Desventajas
          • Puede ser difícil proporcionar una interfaz común para las clases cuya funcionalidad difiere demasiado.
      • Decorator
        • Características
          • Añade funcionalidad extra a un objeto
            • estático
            • Dinámico
          • No modifica el comportamiento del resto de objetos
          • Alternativa flexible a la herencia
        • Función
          • permite adjuntar nuevos comportamientos a los objetos al colocar estos objetos dentro de objetos de envoltura especiales que contienen los comportamientos.
        • Cuando utilizarlo
          • cuando necesite poder asignar comportamientos adicionales a los objetos en tiempo de ejecución sin romper el código que usa estos objetos.
          • cuando sea incómodo o no sea posible extender el comportamiento de un objeto usando la herencia.
        • Ventajas
          • Puede extender el comportamiento de un objeto sin crear una nueva subclase.
          • Puede agregar o quitar responsabilidades de un objeto en tiempo de ejecución.
          • Puede combinar varios comportamientos envolviendo un objeto en múltiples decoradores.
          • Principio de responsabilidad única
        • Desventajas
          • Es difícil eliminar un contenedor específico de la pila de contenedores.
          • Es difícil implementar un decorador de tal manera que su comportamiento no dependa del orden en la pila de decoradores.
          • El código de configuración inicial de las capas puede parecer bastante feo.
      • Facade
        • Fucnión
          • proporciona una interfaz simplificada para una biblioteca, un marco o cualquier otro conjunto complejo de clases.
        • Cuando utilizarlo
          • cuando necesite tener una interfaz limitada pero directa a un subsistema complejo.
          • cuando quiera estructurar un subsistema en capas.
        • Características
          • Define una interfaz de alto nivel
            • Permite que el subisitema sea mas fácil de usar
          • Simplifica tratar con código complejo
        • Ventajas
          • Puede aislar su código de la complejidad de un subsistema.
        • Desventajas
          • Una fachada puede convertirse en un objeto divino acoplado a todas las clases de una aplicación.
      • Flyweight
        • Función
          • permite ajustar más objetos en la cantidad de RAM disponible al compartir partes comunes de estado entre varios objetos en lugar de mantener todos los datos en cada objeto.
        • Cuando utilizarlo
          • cuando su programa debe admitir una gran cantidad de objetos que apenas caben en la RAM disponible.
        • Características
          • ahorro de memoria
          • Objetos comparten un mismo objeto con propiedades comunes
        • Ventajas
          • Puede ahorrar mucha RAM, suponiendo que su programa tenga toneladas de objetos similares.
        • Desventajas
          • Es posible que esté intercambiando RAM por ciclos de CPU cuando algunos de los datos de contexto deben recalcularse cada vez que alguien llama a un método flyweight.
          • El código se vuelve mucho más complicado.
      • Proxy
        • Función
          • Un proxy controla el acceso al objeto original, lo que le permite realizar algo antes o después de que la solicitud llegue al objeto original.
        • Cuando utilizarlo
          • nicialización diferida (proxy virtual). Esto es cuando tiene un objeto de servicio pesado que desperdicia recursos del sistema al estar siempre activo, aunque solo lo necesite de vez en cuando.
          • Ejecución local de un servicio remoto (proxy remoto). Esto es cuando el objeto de servicio se encuentra en un servidor remoto.
        • Características
          • Clase que funciona como interfaz hacia cualquier otra cosa:
            • una conexión a internet
            • Un archivo en disco
            • Recurso costo
            • Recurso imposible de duplicar
        • Ventajas
          • Puede controlar el objeto de servicio sin que los clientes lo sepan.
          • Puede administrar el ciclo de vida del objeto de servicio cuando a los clientes no les importa.
          • El proxy funciona incluso si el objeto de servicio no está listo o no está disponible.
          • Principio abierto / cerrado .
        • Desventajas
          • El código puede volverse más complicado ya que necesita introducir muchas clases nuevas.
          • La respuesta del servicio podría retrasarse.

Information

Description
Mind Map on PATRONES DE DISEÑO GoF, created by Jose Cervera on 25/09/2019.
Created by
Jose Cervera
Views
0
History
  • Created by Jose Cervera · Sep 9, 2019
  • Copied by Jose Cervera · Sep 25, 2019
Rating

More on Patrones de diseño

Feedback

What is it about?

What do you think of the new look?

How do you like it?