Please enable JavaScript.
Coggle requires JavaScript to display documents.
Patrones de Diseño - Coggle Diagram
Patrones de Diseño
-
Patrones Estructurales
Adapter
-
Características
- Envuelve un objeto existente
- Traduce llamadas entre interfaces incompatibles
Caso de uso: Adaptar una librería de pagos antigua para que funcione con la nueva interfaz de pagos de la app.
Ventajas
- Permite reutilizar código legado
- Evita modificar la clase original
Cuándo usarlo: Cuando quieres usar una clase existente pero su interfaz no es compatible con lo que necesita el cliente.
Bridge
Propósito: Separar una abstracción de su implementación para que ambas puedan variar de forma independiente.
Características
- Divide en dos jerarquías: abstracción e implementación
- Reduce el número de clases combinadas
Caso de uso: Control remoto (abstracción) que funciona con distintos tipos de dispositivos (implementación).
Ventajas
- Facilita cambios en la implementación sin afectar la abstracción
- Reduce la explosión de clases por combinaciones
Cuándo usarlo: Cuando tienes varias dimensiones de variación (por ejemplo, forma y dispositivo) y no quieres combinaciones rígidas.
Composite
-
Características
- Organiza objetos en estructuras árbol
- Permite operar sobre nodos y grupos con la misma interfaz
Caso de uso: Sistema de menús y submenús, donde cada elemento puede contener otros elementos.
Ventajas
- Simplifica operaciones sobre estructuras jerárquicas
- Permite agregar nuevos tipos de componentes sin afectar el código cliente
Cuándo usarlo: Cuando necesitas representar estructuras jerárquicas (carpetas, menús, escenas gráficas, etc.).
Decorator
-
Características
- Envuelve al objeto original
- Permite apilar múltiples decoradores
-
Ventajas
- Permite extender comportamiento sin herencia rígida
- Combina responsabilidades de forma flexible
Cuándo usarlo: Cuando quieres agregar funcionalidades opcionales a objetos sin crear muchas subclases.
Facade
-
Características
- Encapsula llamadas a múltiples clases
- Simplifica el uso de librerías complicadas
Caso de uso: Crear una clase SistemaPago que use internamente banco, pasarela y validador de fraudes.
Ventajas
- Reduce la dependencia del código cliente con muchas clases internas
- Hace el sistema más fácil de usar y entender
Cuándo usarlo: Cuando un subsistema es complejo y quieres ofrecer un punto de entrada simple para los clientes.
Flyweight
-
Características
- Divide estado intrínseco y extrínseco
- Reutiliza instancias para datos repetidos
-
Ventajas
- Disminuye el uso de memoria
- Mejora el rendimiento en estructuras muy repetitivas
-
Proxy
-
Características
- Interpone una capa entre el cliente y el objeto real
- Puede diferir la creación o controlar el acceso
-
Ventajas
- Permite control de acceso, lazy loading o cacheo
- Oculta detalles de red o recursos pesados
Cuándo usarlo: Cuando necesitas controlar el acceso a un objeto costoso, remoto o sensible.
Patrones emergentes
-
DAO (Data Access Object)
-
Características
- Define una interfaz clara de operaciones de datos
- Oculta detalles de SQL, ORM o API
-
Ventajas
- Centraliza el acceso a datos
- Facilita cambiar de base de datos o tecnología sin romper la lógica de negocio
-
-
-
-
-
Patrones Creacionales
Factory Method
-
Características
- Centraliza la creación de objetos
- Permite cambiar la clase concreta sin modificar el cliente
Caso de uso: Crear diferentes tipos de botones (Web, Desktop, Mobile) a partir de una misma interfaz Button.
Ventajas
- Reduce acoplamiento con clases concretas
- Facilita la extensión con nuevas variantes
Cuándo usarlo: Cuando necesitas crear familias de objetos pero quieres mantener el código cliente desacoplado.
Abstract Factory
Propósito: Proveer una interfaz para crear familias de objetos relacionados sin especificar sus clases concretas.
Características
- Crea conjuntos completos de objetos compatibles
- Encapsula la lógica de creación
Caso de uso: Crear componentes de interfaz para distintos sistemas operativos (Windows, macOS, Linux) desde una misma fábrica.
Ventajas
- Garantiza consistencia entre objetos relacionados
- Facilita cambios de plataforma o tema visual
Cuándo usarlo: Cuando necesitas cambiar de forma global la familia de productos (por ejemplo, tema oscuro / claro, sistema operativo).
Builder
-
Características
- Permite construir objetos paso a paso
- Soporta diferentes representaciones del mismo producto
Caso de uso: Construir paso a paso un objeto Pedido con productos, dirección, métodos de envío y pago.
Ventajas
- Hace el código de construcción más legible
- Permite reutilizar el proceso de construcción para distintas variantes
Cuándo usarlo: Cuando un objeto tiene muchas opciones obligatorias y opcionales y la construcción fue creciendo en complejidad.
Prototype
-
Características
- Evita crear objetos desde cero
- Duplica estructura y estado del original
Caso de uso: Clonar configuraciones de usuario o plantillas de documentos para crear nuevas instancias rápidamente.
Ventajas
- Ahorra recursos cuando crear desde cero es costoso
- Facilita la creación de objetos similares con pequeñas modificaciones
-
Singleton
Propósito: Garantizar que exista una única instancia de una clase y proporcionar un punto de acceso global.
Características
- Controla la cantidad de instancias
- Expone un método estático para obtener la instancia
-
Ventajas
- Evita estados inconsistentes al tener varias instancias
- Centraliza la configuración o servicios compartidos
Cuándo usarlo: Cuando solo debe existir una instancia global (configuración, conexión compartida, logger, etc.).