Please enable JavaScript.
Coggle requires JavaScript to display documents.
Patrones de Diseño :check:, Ángel Gael Jurado Rodríguez. IDGS71N.,…
Patrones de Diseño :check:
Patrones de Comportamiento :arrows_clockwise:
Chain of Responsibility
Propósito: Permitir que varios objetos manejen una solicitud.
Características: Cadena de manejadores, delegación dinámica.
Caso de uso: Manejo de eventos o validaciones.
Ventajas: Desacoplamiento, fácil extensión.
Cuándo usarlo: Cuando varios objetos pueden procesar la misma solicitud.
Command
Propósito: Encapsular una solicitud como un objeto.
Características: Acción encapsulada, historial de comandos.
Caso de uso: Sistema de deshacer/rehacer.
Ventajas: Flexibilidad, historial de operaciones.
Cuándo usarlo: Cuando necesitas parametrizar métodos o ejecutar acciones agendadas.
Iterator
Propósito: Acceder a elementos de una colección secuencialmente.
Características: Recorrido uniforme, oculta estructura interna.
Caso de uso: Recorrer listas sin exponer detalles internos.
Ventajas: Uso sencillo de estructuras, desacoplamiento.
Cuándo usarlo: Cuando necesitas recorrer estructuras complejas.
Mediator
Propósito: Coordinar la comunicación entre objetos.
Características: Objeto central, reduce dependencias directas.
Caso de uso: Interfaz gráfica donde controles se comunican.
Ventajas: Menos acoplamiento, centraliza control.
Cuándo usarlo: Cuando varios objetos se comunican entre sí.
Memento
Propósito: Guardar/restaurar estado de un objeto.
Características: Copia de estado, sin violar encapsulamiento.
Caso de uso: Función de “deshacer” en aplicaciones.
Ventajas: Recuperación de estados, sin exponer datos internos.
Cuándo usarlo: Cuando necesitas restaurar estados anteriores.
Observer
Propósito: Notificar a muchos objetos sobre cambios.
Características: Uno-a-muchos, actualización automática.
Caso de uso: Suscripción a eventos en UI.
Ventajas: Bajo acoplamiento, flexibilidad.
Cuándo usarlo: Cuando múltiple objetos dependen del estado de otro.
State
Propósito: Permitir cambio de comportamiento según estado interno.
Características: Cambia clase interna, encapsula estados.
Caso de uso: Máquina de estados (ej. cajero automático).
Ventajas: Código organizado, fácil de mantener.
Cuándo usarlo: Cuando un objeto cambia mucho según contexto.
Strategy
Propósito: Definir una familia de algoritmos intercambiables.
Características: Intercambiable, encapsulación.
Caso de uso: Métodos de pago diferentes en un e-commerce.
Ventajas: Flexibilidad, escalabilidad.
Cuándo usarlo: Cuando hay múltiples formas de ejecutar una acción.
Template Method
Propósito: Definir el esqueleto de un algoritmo, delegando pasos.
Características: Método base, pasos redefinibles.
Caso de uso: Algoritmos con variaciones (ej. exportar archivos).
Ventajas: Reutilización, fácil de extender.
Cuándo usarlo: Cuando varias clases comparten lógica principal.
Visitor
Propósito: Separar operaciones de la estructura de objetos.
Características: Facilita nuevas operaciones, sin modificar clases.
Caso de uso: Operaciones sobre elementos de árboles.
Ventajas: Extensión de funcionalidades, separación lógica.
Cuándo usarlo: Cuando necesitas operar sobre estructuras sin modificar sus clases.
Patrones Estructurales :construction:
Bridge
Propósito: Separar abstracción de la implementación.
Características: Dos jerarquías independientes, intercambiable.
Caso de uso: Interfaces gráficas con distintas APIs backend.
Ventajas: Mayor flexibilidad, fácil de extender.
Cuándo usarlo: Cuando quieres variar independiente la abstracción y la implementación.
Adapter
Propósito: Permite usar interfaces incompatibles.
Características: Traduce interfaces, integración sencilla.
Caso de uso: Adaptar pagos entre diferentes sistemas.
Ventajas: Reutilización, flexibilidad.
Cuándo usarlo: Cuando se necesita conectar clases incompatibles.
Composite
Propósito: Tratar objetos individuales y compuestos de la misma forma.
Características: Estructura de árbol, opera sobre todo o partes.
Caso de uso: Gráficos con figuras compuestas en un editor.
Ventajas: Simplicidad, facilidad para estructuras jerárquicas.
Cuándo usarlo: Para jerarquías de componentes.
Decorator
Propósito: Agregar responsabilidades a objetos en tiempo de ejecución.
Características: Envoltura, funcionalidades dinámicas.
Caso de uso: Añadir scroll a una ventana gráfica.
Ventajas: Extensión flexible, no altera el código base.
Cuándo usarlo: Cuando necesitas añadir funcionalidades en tiempo real.
Facade
Propósito: Simplificar la interfaz de un sistema complejo.
Características: Proporciona interfaz única, oculta complejidad.
Caso de uso: Subsystemas en un software (ej. reproductor multimedia).
Ventajas: Facilidad de uso, reduce dependencias.
Cuándo usarlo: Para interfaces simples a subsistemas complejos.
Flyweight
Propósito: Optimizar uso de memoria compartiendo datos.
Características: Compartición, reduce duplicación.
Caso de uso: Caracteres en un editor de texto.
Ventajas: Menor consumo de memoria, eficiencia.
Cuándo usarlo: Cuando hay gran cantidad de objetos similares.
Proxy
Propósito: Controlar acceso y acciones a un objeto.
Características: Control proxy, acceso indirecto.
Caso de uso: Control de acceso a recursos (seguridad/caché).
Ventajas: Seguridad, manejo de recursos.
Cuándo usarlo: Cuando se necesita control antes/después de acceder a un objeto.
Patrones Creacionales :building_construction:
Factory Method
Propósito: Delegar la creación de objetos a subclases.
Características: Define método fábrica, promueve la extensión, desacopla la creación.
Caso de uso: Crear diferentes tipos de botones (Windows, Mac, Linux) en GUI.
Ventajas: Flexibilidad, aumento de extensibilidad.
Cuándo usarlo: Cuando el tipo de objeto a crear puede variar en ejecución.
Abstract Factory
Propósito: Crear familias de objetos relacionados sin especificar la clase concreta.
Características: Agrupa fábricas, consistente, desacoplado.
Caso de uso: Temas visuales completos en interfaces.
Ventajas: Consistencia, escalabilidad.
Cuándo usarlo: Cuando se requieren conjuntos coherentes de objetos.
Builder
Propósito: Construir objetos complejos paso a paso.
Características: Separación construcción/representación, control detallado.
Caso de uso: Crear documentos o autos personalizados.
Ventajas: Flexibilidad al crear, fácil de leer.
Cuándo usarlo: Al crear objetos con muchas opciones/configuraciones.
Prototype
Propósito: Crear objetos clonando una instancia existente.
Características: Clonación, evita herencia, rápido.
Caso de uso: Copiar personajes en videojuegos.
Ventajas: Alta eficiencia, fácil duplicación.
Cuándo usarlo: Cuando la creación por clonación es más eficiente.
Singelton
Propósito: Garantizar instancia única de una clase.
Características: Control acceso global, instancia única.
Caso de uso: Gestor de configuración global.
Ventajas: Un solo punto de control, ahorra recursos.
Cuándo usarlo: Cuando solo debe haber una instancia (ej. logs).
Patrones Emergentes :rocket:
MVC
Propósito: Separar lógica, presentación y control de datos.
Características: Tres componentes, separación clara.
Caso de uso: Apps web con interfaces dinámicas.
Ventajas: Fácil de mantener y escalar.
Cuándo usarlo: Interfaces con interacción usuario-datos.
DAO
Propósito: Abstraer y encapsular acceso a datos.
Características: Separación de lógica-negocio y acceso datos.
Caso de uso: Bases de datos en aplicaciones empresariales.
Ventajas: Flexibilidad, cambios fáciles en BD.
Cuándo usarlo: Cuando la lógica requiere acceso estructurado y seguro a datos.
CQRS
Propósito: Separar operaciones de consulta y comando.
Características: Divide lectura/escritura, mayor optimización.
Caso de uso: Apps de alta escala con muchas consultas/escrituras.
Ventajas: Mejor rendimiento, menos conflictos.
Cuándo usarlo: Cuando necesitas optimización al máximo de operaciones.
DDD
Propósito: Modelar software basándose en el dominio del problema.
Características: Enfoque en negocio, lenguaje ubicuo.
Caso de uso: Sistemas empresariales complejos.
Ventajas: Alineación con el negocio, mayor entendimiento.
Cuándo usarlo: Desarrollos donde el dominio es complicado o cambiante.
MVVM
Propósito: Separar lógica de negocio y UI con “binding” automático.
Características: ViewModel enlaza datos y lógica, adaptación fácil.
Caso de uso: Apps de escritorio o móviles con bindings.
Ventajas: Tests más sencillos, mantenimiento fácil.
Cuándo usarlo: Interfaces ricas en aplicaciones modernas.
MVP
Propósito: Separar lógica de presentación y vista.
Características: Presenter maneja la lógica, View es pasiva.
Caso de uso: Interfaces gráficas, apps desktop.
Ventajas: Código más limpio, test unitarios sencillos.
Cuándo usarlo: Al separar completamente presentación y lógica.
Ángel Gael Jurado Rodríguez. IDGS71N.
Arquitecturas de Software
Universidad Tecnológica de Chihuahua