Introducción a los patrones de diseño
Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 44 de 64.
Los patrones de diseño son soluciones reutilizables a problemas comunes en el diseño de software. Son como planos que puedes personalizar para resolver problemas de diseño recurrentes en tu código.
Piense en los patrones de diseño como plantillas probadas que los desarrolladores experimentados utilizan para resolver problemas similares. Cuando dice "utilicé el patrón Singleton", otros desarrolladores comprenden inmediatamente la estructura de su código.
Aquí hay un ejemplo sencillo de por qué los patrones son importantes:
# Sin patrón - enfoque desordenado
class DatabaseConnection:
def __init__(self):
self.connection = "Connected to database"
# Problema: Se crean múltiples conexiones
db1 = DatabaseConnection()
db2 = DatabaseConnection() # Ineficiente - crea otra conexiónCon un patrón de diseño, obtienes una mejor solución:
# Con el patrón Singleton - enfoque controlado
class DatabaseConnection:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.connection = "Connected to database"
return cls._instance
# Ahora solo existe una conexión
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # True - misma instanciaPor qué usar patrones de diseño:
- Reutilización: Soluciones que puedes aplicar a problemas similares
- Comunicación: Vocabulario común entre desarrolladores
- Mejores prácticas: soluciones de eficacia comprobada
- Mantenibilidad: código bien estructurado y organizado
Lo que aprenderás en esta serie:
Patrones de creación (cómo se crean los objetos):
- Patrón Singleton - Solo una instancia
- Patrón Factory - Crear objetos sin especificar la clase exacta
Patrones estructurales (cómo se componen los objetos):
- Patrón Adapter - Hacer que interfaces incompatibles trabajen juntas
- Patrón Decorator - Añadir funcionalidad sin cambiar la estructura
Patrones de Comportamiento (cómo interactúan los objetos):
- Patrón Observer - Notifica cambios a múltiples objetos
- Patrón Strategy - Cambia algoritmos dinámicamente
- Patrón Command - Encapsula peticiones como objetos
Cada lección de patrón cubrirá:
- Qué problema resuelve
- Cómo implementarlo en Python
- Cuándo usarlo
- Ejemplos del mundo real
Punto clave: Los patrones de diseño son soluciones probadas a problemas comunes de programación. Proporcionan un vocabulario compartido y mejores prácticas que hacen que tu código sea más mantenible, flexible y fácil de entender. Aprenderás 7 patrones esenciales que todo desarrollador de Python debería conocer.
Hoja de referencia
Los patrones de diseño son soluciones reutilizables a problemas comunes en el diseño de software. Proporcionan plantillas probadas para resolver problemas de diseño recurrentes.
Beneficios de los patrones de diseño:
- Reutilización: Soluciones que puedes aplicar a problemas similares
- Comunicación: Vocabulario común entre desarrolladores
- Mejores prácticas: Soluciones probadas a lo largo del tiempo
- Mantenibilidad: Código bien estructurado y organizado
Ejemplo - Patrón Singleton:
# Sin patrón - crea múltiples instancias
class DatabaseConnection:
def __init__(self):
self.connection = "Connected to database"
# Con el patrón Singleton - asegura una única instancia
class DatabaseConnection:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance.connection = "Connected to database"
return cls._instanceCategorías de patrones:
- Patrones de creación (cómo se crean los objetos): Singleton, Factory
- Patrones estructurales (cómo se componen los objetos): Adapter, Decorator
- Patrones de comportamiento (cómo interactúan los objetos): Observer, Strategy, Command
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - Jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso - Lista personalizada10Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancarias