Mapa mental
PATRONES DE DISEÑO GoF

Contenido del mapa
PATRONES DE DISEÑO GoF
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.
- Diagrama UML
- Función
- permite pasar solicitudes a lo largo de una cadena de controladores.
- Cuando utilizarlo
- 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.
- Características
- 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.
- Características
- 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.).
- Cuando utilizarlo
- 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 .
- Diagrama UML
- Características
- 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.
- Diagrama UML
- Función
- 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.
- Diagrama UML
- Función
- 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
- Permite cambiar el comportamiento de un objeto en ejecución
- 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.
- Diagrama UML
- Desventajas
- 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
- Permite variación del algoritmo seleccionado
- Define una familia de algoritmos
- 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
- Diagrama UML
- Función
- 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.
- Diagrama UML
- Desventajas
- 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
- Representa una operación
- 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.
- Diagrama UML
- Desventajas
- Chain of Responsibility
- Funciones
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
- Proporciona interfaz para crear familia de objetos
- 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.
- Diagrama UML
- Características
- 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.
- Diagrama UML
- Desventajas
- 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
- Diagrama UML
- Funció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.
- Diagrama UML
- Desventajas
- 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.
- Diagrama UML
- Características
- Abstract Factory
- Funciones
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.
- Diagrama UML
- Desventajas
- 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
- Desacopla una abstracción de su implementación
- 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
- Diagrama UML
- Desventajas
- 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.
- Diagrama UML
- Función
- 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
- Añade funcionalidad extra a un objeto
- 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.
- Diagrama UML
- Características
- 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
- Define una interfaz de alto nivel
- 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.
- Diagrama UML
- Fucnió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.
- Diagrama UML
- Función
- 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
- Clase que funciona como interfaz hacia cualquier otra cosa:
- 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.
- Diagrama UML
- Función
- Adapter
- Funciones
Imágenes y archivos del mapa
Información
- Descripción
- Mapa Mental sobre PATRONES DE DISEÑO GoF, creado por Jose Cervera el 09/09/2019.
- Creado por
- Jose Cervera
- Visitas
- 0
- Valoración





























































































